一、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;
}