zoukankan      html  css  js  c++  java
  • 简单的变长数组

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

    #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;
    }
    我们一路奋战,不是为了改变世界,而是不让世界改变我们 ——《熔炉》
  • 相关阅读:
    sizzle编译函数
    人人都是 DBA(XII)查询信息收集脚本汇编
    人人都是 DBA(XI)I/O 信息收集脚本汇编
    人人都是 DBA(X)资源信息收集脚本汇编
    人人都是 DBA(IX)服务器信息收集脚本汇编
    人人都是 DBA(VIII)SQL Server 页存储结构
    人人都是 DBA(VII)B 树和 B+ 树
    人人都是 DBA(VI)SQL Server 事务日志
    人人都是 DBA(V)SQL Server 数据库文件
    人人都是 DBA(IV)SQL Server 内存管理
  • 原文地址:https://www.cnblogs.com/ZRBYYXDM/p/5143304.html
Copyright © 2011-2022 走看看