Vector的简单实现

来源:互联网 发布:linux sleep delay 编辑:程序博客网 时间:2024/06/18 17:49

借鉴《数据结构和算法分析c++描述》中:

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;};
主要内容有:
1.为考虑容器数据类型多样性,采用模板形式  template <typename Object>
2.构造函数显式化,防止由构造函数定义的隐式变换,若去除explicit,那么 Vector v;  v=2;将是合法的,但是我们禁止这种操作,只允许实现v=Vector(2);
3.重写复制构造函数、赋值运算符、通过下标访问和修改vector运算符(根据是否可以修改成员数据对象,分别定义为const &和 引用)

原创粉丝点击