template<typename Object> class Vector { public: explicit Vector(int initSize=0) :theSize(initSize),theCapacity(initSize+SPARE_CAPACITY) { objects=new Object[theCapacity]; } Vector(const Vector& rhs):objects(NULL) { operator=(rhs); } ~Vector() { delete[] objects; } const Vector& operator=(const Vector& rhs) { if(this!=&rhs) { delete[] objects; theSize=rhs.size(); theCapacity=rhs.theCapacity; objects=new Object[capacity()]; for(int k=0;k<size();k++) objects[k]=rhs.objects[k]; } return *this; } void resize(int newSize) { if(newSize>theCapacity) reserve(newSize*2+1); theSize=newSize; } void reserve(int newCapacity) { if(newCapacity<theSize) return; Object* oldArray=objects; objects=new Object[newCapacity]; for(int k=0;k<theSize;k++) objects[k]=oldArray[k]; theCapacity=newCapacity; delete[] oldArray; } Object& operator[](int index) { return objects[index]; } const Object& operator[](int index) const { return objects[index]; } bool empty() const { return size()==0; } int size() const { return theSize; } int capacity() const { return theCapacity; } void push_back(const Object& x) { if(theSize==theCapacity) reserve(2*theCapacity+1); objects[theSize++]=x; } void pop_back() { theSize--; } const Object& back() const { return objects[theSize-1]; } typedef Object* iterator; typedef const Object* const_iterator; iterator begin() { return &objects[0]; } const_iterator begin() const { return &objects[0]; } iterator end() { return &objects[size()]; } const_iterator end() const { return &objects[size()]; } enum{SPARE_CAPACITY=16}; private: int theSize; int theCapacity; Object* objects; };
向量(Vector)的大概实现
猜你喜欢
转载自www.cnblogs.com/lhb666aboluo/p/12692331.html
今日推荐
周排行