简单的变长数组

以下是实现以及应用的一个例程:

#include <iostream>

using namespace std;

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;
};

int main()
{
    Vector<int> Num;
    cout << "输入一组数据:" << endl;

    int temp;
    while ( cin >> temp )
        Num.push_back( temp );

    cout << "你输入的数据是:" << endl;

    Vector<int>::iterator iter = Num.begin();
    for ( ; iter != Num.end() ; ++iter )
        cout << *iter << " ";

    cout << endl;

    return 0;
}
我们一路奋战,不是为了改变世界,而是不让世界改变我们 ——《熔炉》
原文地址:https://www.cnblogs.com/ZRBYYXDM/p/5143304.html