您的位置:首页 > 其它

vector的简单实现

2015-11-24 09:51 183 查看
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 != objects.size(); ++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 thrCapacity;

}

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[theSize];}

const_iterator end() const {return &objects[theSize];}

enum {SPARE_CAPACITY = 16};

private:

int theSize;

int theCapacity;

Object* objects;

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: