• 简单的变长数组


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

    #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;
    }
    我们一路奋战,不是为了改变世界,而是不让世界改变我们 ——《熔炉》
  • 相关阅读:
    MySQL递归查询树状表的子节点、父节点
    ajax传递参数给springmvc总结[转]
    转:Java中String与byte[]的转换
    easymock的用法
    java的反射
    spring的依赖注入
    等页面加载完
    ajax请求
    对象的复制
    springJDBC
  • 原文地址:https://www.cnblogs.com/ZRBYYXDM/p/5143304.html
Copyright © 2020-2023  润新知