一、stack
1、stack概述
stack是一种先进后出(First In LastOut,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 e ; //底层容器 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<int,list<int>>istack
#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 FirstOut,FIFO)的数据结构,它有两个出口。queue允许新增元素、移除元素、从最底端加入元素、取得最顶端元素,但不允许遍历行为。
2、SGISTL以deque作为缺省情况下的queue底部结构。
template<class T, class Sequence = dique<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<int,list<int>>iqueue
#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; }