vector实现

张开发
2026/4/17 19:12:42 15 分钟阅读

分享文章

vector实现
#define _CRT_SECURE_NO_WARNINGS #include assert.h namespace zym { templateclass T class vector { public: typedef T* iterator; typedef const T* const_iterator; //构造函数 vector() :_start(nullptr) , _finish(nullptr) , _endofstorage(nullptr) { } //拷贝构造 vector(const vectorT v) { iterator ptr new T[v.capacity()]; _start ptr; _finish _start; _endofstorage _startv.capacity(); for (size_t i 0; i v.size(); i) { *_finish v[i]; _finish; } } //赋值 //vectorT operator(const vectorT v) //{ // if (this ! v) // { // delete[] _start; // iterator ptr new T[v.capacity()]; // _start ptr; // memcpy(_start, v._start, v.size() * sizeof(T)); // _finish _start size(); // _endofstorage _start capacioty(); // } // return *this; //} //赋值现代写法 vectorT operator(vectorT v) { swap(v); return *this; } void swap(vectorT v) { ::swap(_start, v._start); ::swap(_finish, v._finish); ::swap(_endofstorage, v._endofstorage); } iterator begin() { return _start; } iterator end() { return _finish; } const_iterator begin() const { return _start; } const_iterator end() const { return _finish; } //开辟空间 void reserve(size_t n) { if (n capacity()) { size_t sz size(); T* ptr new T[n]; if (_start) { memcpy(ptr, _start, size() * sizeof(T)); delete[] _start; } _start ptr; _finish ptr sz; _endofstorage ptr n; } } //追加 void push_back(const T x) { //if (_finish _endofstorage) //{ // size_t newcapacity capacity() 0 ? 2 : 2 * capacity(); // reserve(newcapacity); //} //*_finish x; //_finish; insert(_finish, x); } //析构函数 ~vector() { delete[] _start; _start _finish _endofstorage nullptr; } size_t size() { return _finish - _start; } size_t size() const { return _finish - _start; } size_t capacity() { return _endofstorage - _start; } size_t capacity() const { return _endofstorage - _start; } T operator[](size_t i) { assert(i size()); return *(_start i); } const T operator[](size_t i) const { assert(i size()); return *(_start i); } //尾删 void pop_back() { assert(_start _finish); --_finish; } void insert(iterator pos,const T x) { assert(pos _finish); if (_finish _endofstorage) { size_t n pos - _start; size_t newcapacity capacity() 0 ? 2 : 2 * capacity(); reserve(newcapacity); posn_start; } iterator end _finish - 1; while (endpos) { *(end1) *end; --end; } *(pos) x; _finish; } iterator erase(iterator pos) { assert(pos _finish); iterator it pos; while (it _finish) { *it *(it 1); it; } --_finish; return pos; //返回下一个位置 } void resize(size_t n,const T valT()) { if (n size()) { iterator it _start n; while (it _finish) { *itT(); it; } _finish _start n; } else { size_t len size(); if (n capacity()) { reserve(n); } while(_finish_startn) { *_finish val; _finish; } } } private: iterator _start; iterator _finish; iterator _endofstorage; }; //只能读的迭代器 void print_vector(const vectorint v) { vectorint::const_iterator it v.begin(); while (it ! v.end()) { cout *it ; it; } cout endl; } void test_vector1() { vectorint v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); vectorint::iterator it v.begin(); while (it ! v.end()) { cout *it ; it; } cout endl; for (auto e : v) { e e - 1; cout e ; } cout endl; v.insert(v.end() - 1, 6); for (size_t i 0; i v.size(); i) { cout v[i] ; } cout endl; print_vector(v); } void test_vector2() { vectorint v; v.reserve(10); v.push_back(1); v.push_back(2); v.push_back(3); print_vector(v); cout v.size() endl; cout v.capacity() endl; v.resize(5, 6); print_vector(v); cout v.size() endl; cout v.capacity() endl; v.resize(12); print_vector(v); cout v.size() endl; cout v.capacity() endl; } void test_vector3() { vectorint v; v.push_back(1); v.push_back(2); v.push_back(3); vectorintv2(v); print_vector(v2); } }注意memcpy进行拷贝的话是浅拷贝当时自定义类型进行扩容操作可能会崩溃

更多文章