自己实现STL中的vector
编辑:谯胜平 分类:程序与算法 标签:vector,STL 发布时间:2021-03-25 浏览次数:64次
#include<iostream> #include<string> #define default_size 8 using namespace std; template <class ElemType> class vector { private: int _size; int _capacity; ElemType *elements; public: vector(){ _size = 0; _capacity = default_size; elements = new ElemType[_capacity]; cout << "构造函数" << endl; } vector(int newSize, ElemType value = false){ _size = 0; _capacity = default_size; elements = new ElemType[_capacity]; for(int i = 0; i < newSize; i++){ push_back(value); } } //插入元素 void push_back(const ElemType &ref){ if(_size == _capacity){ reserve(_size * 2); } elements[_size++] = ref; } //清除末尾 void pop_back(){ if(_size == 0) return; _size--; } //清空 void clear(){ _size = 0; } bool empty(){ return _size; } //重载[]运算符 ElemType& operator[](int pos){ return elements[pos]; } //重载=运算符 vector& operator = (const vector& ref){ for(int i = 0; i < ref.size(); i++){ push_back(ref[i]); } return this; } //返回元素个数 int size(){ return _size; } //返回内存空间大小 int capacity(){ return _capacity; } //重置元素个数大小 void resize(int newSize){ if(newSize < 0) return; if(newSize > _capacity){ reserve(newSize * 2); } _size = newSize; } //重置空间大小 void reserve(int newCapacity){ if(newCapacity <= _capacity) return; ElemType *newElements = new ElemType[newCapacity]; //将原来的元素拷贝到新的数组中 for(int i = 0; i < _size; i++){ newElements[i] = elements[i]; } delete[] elements; elements = newElements; _capacity = newCapacity; } //定义迭代器 typedef ElemType *iterator; iterator begin(){ return &elements[0]; } iterator end(){ return &elements[_size]; } //析构函数 ~vector(){} }; int main(){ vector<int> ve; cout << "vector insert elements: "; for(int i = 0; i < 18; i ++){ ve.push_back(i); cout << i << " "; } cout << endl; cout << "vector insert answers: "; for(int i = 0; i < ve.size(); i++){ cout << ve[i] << " "; } cout << endl; cout << "vector copy elements: "; vector<int> vb = ve; for(vector<int>::iterator it = vb.begin(); it != vb.end(); it++){ cout << *it << " "; } cout << endl; cout << "vector size: " << vb.size() << " vector capacity: " << vb.capacity()<<endl; return 0; }
运行结果: