STL源码剖析-序列式容器之stack和queue

来源:互联网 发布:搏击俱乐部知乎 编辑:程序博客网 时间:2024/05/21 12:48

一.stack

1.stack概述

stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口.stack允许新增元素,移除元素,取得最顶端元素,但不允许遍历行为.

由于stack是以底部容器完成其所有工作,而具有这种"修改某物接口,形成另一种风貌"之性质者,成为adapter(配接器).

这里写图片描述

2.SGI STL以deque作为缺省情况下的stack底部结构

    template<class T, class Sequence = deque<T> >      class stack{          friend bool operator== __STL_NULL_TMPL_ARGS(const stack& , const stack&) ;          friend bool operator< __STL_NULL_TMPL_ARGS(const stack& , const stack&) ;      public :          typedef typename Sequence::value_type value_type ;          typedef typename Sequence::size_type size_type ;              typedef typename Sequence::reference reference ;          typedef typename Sequence::const_reference  const_reference ;      protected:          Sequence c ; //底层容器      public :          //以下完全利用Sequence c 的操作,完成stack的操作          bool empty() const {return c.empty() ;}           size_type size() {return c.size();}          reference top() {return c.back();}          const_reference top() const {return c.back();}          //deque是两头可进出,stack是末端进,末端出。          void push(const value_type& x) {c.push_back(x) ;}          void pop() {c.pop_back() ;}      } ;  

3.stack也可以用list作为底层容器,定义:stack

    #include<stack>      #include<list>      #include<algorithm>      #include <iostream>      using namespace std;      int main(){          stack<int, list<int>> istack;          istack.push(1);          istack.push(3);          istack.push(5);          cout << istack.size() << endl; //3          cout << istack.top() << endl;//5          istack.pop();          cout << istack.top() << endl;//3          cout << istack.size() << endl;//2          system("pause");          return 0;      }  

二.queue

1.queue概述

queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口.queue允许新增元素,移除元素,从底端加入元素,取得最顶端元素,但不允许遍历行为.

这里写图片描述

2.SGI STL以deque作为缺省情况下的queue底部结构.

    template<class T, class Sequence = deque<T> >      class queue{      public :              typedef typename Sequence::value_type value_type ;          typedef typename Sequence::size_type size_type ;          typedef typename Sequence::reference reference ;          typedef typename Sequence::const_reference const_reference ;      protected :          Sequence c ; //底层容器      public :          //以下完全利用Sequence c的操作,完成queue的操作          bool empty() const {return c.empty();}          size_type size() const {return c.size();}          reference front() const {return c.front();}          const_reference front() const {return c.front();}          //deque是两头可进出,queue是末端进,前端出。          void push(const value_type &x) {c.push_back(x) ;}           void pop() {c.pop_front();}      } ;  

3.queue也可以用list作为底层容器,定义:queue

    #include<queue>      #include<list>      #include<algorithm>      #include <iostream>      using namespace std;      int main(){          queue<int, list<int>> iqueue;          iqueue.push(1);          iqueue.push(3);          iqueue.push(5);          cout << iqueue.size() << endl; //3          cout << iqueue.front() << endl;//1          iqueue.pop();          cout << iqueue.front() << endl;//3          cout << iqueue.size() << endl;//2          system("pause");          return 0;      }  
0 0
原创粉丝点击