现在的位置: 首页 > 综合 > 正文

fookwood的简单vector实现

2013年05月25日 ⁄ 综合 ⁄ 共 1794字 ⁄ 字号 评论关闭
#include<iostream>
#include<algorithm>
template<typename Object>
class Vector{
private:
        int theSize; //the elements it contains
        int theCapacity;
        Object *objects;
public:
        explicit Vector( int initSize = 0 ):
                theSize( initSize ),theCapacity( initSize + SPACE_CAPACITY ){
                objects = new Object[ theCapacity ]; 
        }
        Vector( const Vector & rhs ):objects( NULL ){
                operator=( rhs );
        }//copy constructor
        ~Vector(){
                delete [] objects;
        }

        const Vector & operator= ( const Vector & rhs ){
                if( this != &rhs ){
                        delete [] objects;
                        theSize = rhs.size();
                        theCapacity = rhs.capacity();

                        objects = new Object[ capacity() ];
                        for( int k = 0; k < theSize; k++ ) 
                                objects[k] = rhs.objects[k];
                }
                return *this;
        }// above is the "big three"

        void resize( int newSize ){
                if( newSize > theCapacity )
                        reserve( newSize*2 + 1 ); //in case the size is 0
                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;//use native pointer as 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{ SPACE_CAPACITY = 16 };
};

int main() {
        
        Vector<int> V;
        for( int i = 0; i < 100; i++ )
                V.push_back( i );
        V.push_back(1);
        
        const Vector<int> v( V );
        std::sort(V.begin(), V.end());
        for( Vector<int>::const_iterator it = V.begin(); 
                        it != V.end(); it++ )
                std::cout << *it << std::endl;
        return 0;
}

抱歉!评论已关闭.