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
- STL源码剖析-序列式容器之stack和queue
- 【STL源码剖析读书笔记】【第4章】序列式容器之stack和queue
- 【STL】序列式容器--stack和queue
- STL源码剖析之stack,queue容器【2013.11.25】
- STL源码剖析 - 第4章 序列式容器 - queue
- STL源码剖析 - 第4章 序列式容器 - stack
- STL源码剖析-序列式容器之vector
- STL源码剖析-序列式容器之deque
- STL之queue和stack容器
- STL之queue和stack容器
- STL容器之stack和queue
- STL容器总结之stack和queue
- STL容器总结之stack和queue
- STL源码剖析---stack,queue
- STL源码剖析-序列式容器之list和slist
- STL源码剖析-序列式容器之heap和priority_queue
- Chapter 4: 序列式容器之 stack 和 queue
- STL源码剖析之序列容器list
- HashMap内部原理
- Socket-基础客户端/服务器数据传输
- 数据立方体----维度与OLAP
- 如何在Markdown中插入公式
- 基础知识—函数-函数概述
- STL源码剖析-序列式容器之stack和queue
- 51nod 1524 可除图的最大团
- QQ浏览器保存网页为mhtml文件
- String,StringBuffer,StringBuild的区别
- html5基本语法(二)
- 动态页面转化为静态页面
- 设置背景图片自动适应屏幕
- Myeclipse报错:org.eclipse.swt.custom.StyledText.getScrollbarsMode()I (成功解决)
- 自动扫描加载Struts2.3.16配置文件