• 简单的栈


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

    #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;
    };
    
    template <typename element>
    class Stack
    {
        public:
           Stack() : theArray( Vector<element>() ) //构造函数
           { topOfStack = -1; }
    
           void push( element &x )                                                //入栈
           {
               theArray.push_back( x );
               topOfStack++;
           }
    
           const element &pop()                                                          //出栈
           {
               topOfStack--;
               const element &last = theArray.back();
               theArray.pop_back();
    
               return last;
           }
    
            bool IsEmpty()
            { return topOfStack == -1; }
    
        private:
            Vector<element> theArray;
            int topOfStack;
    };
    
    int main()
    {
        Stack<int> Num;
    
        cout << "入栈一组数据" << endl;
    
        int temp;
        while ( cin >> temp )
            Num.push( temp );
    
        cout << "出栈:" << endl;
        while ( !Num.IsEmpty() )
            cout << Num.pop() << endl;
    
        return 0;
    }
    我们一路奋战,不是为了改变世界,而是不让世界改变我们 ——《熔炉》
  • 相关阅读:
    11g新特性-dba_users安全性的一些增强
    sysbench的安装与使用(with MySQL)
    参数table_open_cache
    参数max_allowed_packet
    解决linux下unzip中文有乱码的问题
    11g添加asm
    有了iscsi存储怎么让主机识别以及使用创建lvm
    用rlwrap使sqlplus可以上下翻页
    卸载已经安装的rpm包
    物化视图刷新慢--有可能是mv log被多个mv使用造成的
  • 原文地址:https://www.cnblogs.com/ZRBYYXDM/p/5143410.html
Copyright © 2020-2023  润新知