Vector類的實現

實現部分vector的類

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){
       	delete [] objects;
       	theSize = rhs.size();
       	theCapacity = rhs.theCapacity;

       	objects = new Object[capacity()];
       	for(int k = 0; k < theSize; k++)
       	      objects[k] = rhs.objects[k];
       }
       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;
}


發佈了79 篇原創文章 · 獲贊 5 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章