STL之顺序容器适配器(栈的数组实现代码)

stack容器适配器的简介见:http://www.cnblogs.com/alan-forever/archive/2012/09/16/2687480.html

这份代码是用数组实现(也可以说是用vector实现,实质都一样!)

  1 #include<iostream>

  2 using namespace std;

  3 

  4 template <typename Object>

  5 class Stack

  6 {

  7 public:

  8     enum { Capacity = 20 };

  9 

 10     Stack( )

 11     {

 12         init( );

 13     }

 14                                             //构造函数,调用init函数生成默认栈!

 15     ~Stack( )

 16     {

 17         theSize = 0;

 18         delete [ ] data;

 19     }

 20                                             //析构函数。

 21     int size( )

 22     {

 23         return theSize;

 24     }

 25                                             //返回栈里面元素的数目。

 26     bool empty( )

 27     {

 28         return size() == 0;

 29     }

 30                                             //判断栈时候为空

 31     void push( const Object & x )

 32     {

 33         data[ theSize++ ] = x;

 34         if( theSize == theCapacity )

 35         reserve( theSize );

 36     }

 37                                             //进栈操作,因为用数组实现,为了防止数组开的不够,用了Vector自动变大的操作!

 38     void reserve( int newCapacity )

 39     {

 40         Object * oldArry = data;

 41         theCapacity = 2 * newCapacity + 1;

 42         data = new Object[ theCapacity ];

 43 

 44         for(int i = 0; i != size(); ++i)

 45         {

 46             data[ i ] = oldArry[ i ];

 47         }

 48         delete [ ] oldArry;

 49     }

 50                                             //栈的容量自动变大的操作!

 51     const Object top( ) const

 52     {

 53         return data[ theSize - 1 ];

 54     }

 55                                             //返回栈顶元素。

 56     void pop( )

 57     {

 58         theSize--;

 59     }

 60                                             //弹出栈顶元素。

 61 private:

 62     Object * data;                          //数组!

 63     int theSize;                            //栈的元素数目。

 64     int theCapacity;                        //栈的最大容量。

 65 

 66     void init( )

 67     {

 68         theSize = 0;

 69         theCapacity = Capacity;

 70         data = new Object[ theCapacity ];

 71     }                                       //默认函数。

 72 };

 73 

 74  int main( )

 75  {

 76      Stack<int> s;

 77      cout << "输出默认生成的栈的元素的数目:" << endl;

 78      cout << s.size( ) << endl;

 79      int num, m;

 80      cout << "输入需要压进栈的元素的数目:" << endl;

 81      cin >> num;

 82      for(int i = 1; i <= num; ++i)

 83      {

 84          cin >> m;

 85          s.push( m );

 86          cout << "栈顶的元素:" << endl;

 87          cout << s.top( ) << endl;

 88      }

 89      cout << "输出栈的大小:" << endl;

 90      cout << s.size( ) << endl;

 91      s.pop( );

 92      cout << "在pop操作之后,栈顶元素值为:" << endl;

 93      cout << s.top( ) << endl;

 94      cout << "在pop操作之后,栈的大小:" << endl;

 95      cout << s.size( ) << endl;

 96      cout << "栈的empty操作!" << endl;

 97      if( s.empty( ) )

 98      cout << "It is empty!" << endl;

 99      else

100      cout << "It is not empty!" << endl;

101      return 0;

102  }

你可能感兴趣的:(STL)