template<typename Object>
class Vector
{
public:
enum {SPARE_CAPACITY=16};
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.theSize;
theCapacity=rhs.theCapacity;
objects=new Object[theCapacity];
for(int i=0;i<theSize;i++)
objects[i]=rhs.objects[i];
}
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 i=0;i<theSize;i++)
objects[i]=oldArray[i];
theCapacity=newCapacity;
delete []oldArray;
}
Object &operator[](int idx)
{return objects[idx];}
const Object &operator[](int idx) const
{return objects[idx];}
bool empty()
{return theSize==0;}
int size()
{return theSize;}
int capacity()
{return theCapacity;}
void push_back(const Object &x)
{
if(theSize==theCapacity)
reserve(theCapacity*2+1);
objects[theSize]=x;
theSizee++;
}
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[theSize];}
const_iterator end() const
{return &objects[theSize];}
private:
int theSize;
int theCapacity;
Object *objects;
};
没有考虑到错误检测,迭代器失效
vector类的实现
最新推荐文章于 2024-05-22 23:38:18 发布