STL学习——Stack/Queue篇
2016-05-06 22:37
507 查看
STL学习——Stack/Queue篇
Stack
概述stack是一种先进先出的数据结构,只有一个出口,stack允许新增元素,移除元素,取得最顶端元素。但除了最顶端外,没有任何办法可以存取stack其他元素。即不允许遍历行为。
实现
stack实现是以容器为底部结构的,将容器的接口改变,使其符合“先进先出”特性,便形成了一个栈。具体实现可以将底部deque的头端开口封闭,便实现了stack。因为stack具有“修改某物接口,形成另一种风貌”性质,故称为“适配器”。stack被归类为container adapter。
stack中没有迭代器,不提供走访功能。此外,stack还可以使用list作为底层容器。下面是stack的源码分析。
template <class _Tp, class _Sequence> class stack { ... public: typedef typename _Sequence::value_type value_type; typedef typename _Sequence::size_type size_type; typedef _Sequence container_type; typedef typename _Sequence::reference reference; typedef typename _Sequence::const_reference const_reference; protected: _Sequence c; // 底层容器 public: // 以下完全利用Squence c操作,完成stack的操作 stack() : c() {} explicit stack(const _Sequence& __s) : c(__s) {} // 判断栈空操作 bool empty() const { return c.empty(); } // 判断栈大小操作 size_type size() const { return c.size(); } // 返回栈顶元素操作 reference top() { return c.back(); } const_reference top() const { return c.back(); } // 压栈操作 void push(const value_type& __x) { c.push_back(__x); } // 弹栈操作 void pop() { c.pop_back(); } }; // 栈相等操作 template <class _Tp, class _Seq> bool operator==(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y) { return __x.c == __y.c; } // 栈小于操作 template <class _Tp, class _Seq> bool operator<(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y) { return __x.c < __y.c; } ...
Queue
概述queue是一种先进先出的数据结构。它有两个出口。它允许新增元素,移除元素,从最底端加入元素,取得最顶端元素。除了从最底端加入元素,最顶端去除元素外,没有任何方法存取queue其他元素。即它也不存在遍历操作。
实现
queue也是以容器为底部结构,改变其接口,使其符合先进先出特性,形成queue。其实现可以将deque的低端出口和前端入口封闭,便可轻易实现queue。queue也具有“修改某物接口,形成另一种风貌”性质,故也为配接器。它也被归为容器适配器。它也不存在迭代器,故也不能执行遍历操作。下面是queue的源码分析。
template <class _Tp, class _Sequence> class queue { ... public: typedef typename _Sequence::value_type value_type; typedef typename _Sequence::size_type size_type; typedef _Sequence container_type; typedef typename _Sequence::reference reference; typedef typename _Sequence::const_reference const_reference; protected: _Sequence c; // 底层容器 public: queue() : c() {} explicit queue(const _Sequence& __c) : c(__c) {} // 判断队列是否为空 bool empty() const { return c.empty(); } // 计算队列的长度 size_type size() const { return c.size(); } // 返回队首元素 reference front() { return c.front(); } const_reference front() const { return c.front(); } // 返回队尾元素 reference back() { return c.back(); } const_reference back() const { return c.back(); } // deque是两头可进出,queue是末端进,前端出(所有先进者先出) // 入队操作 void push(const value_type& __x) { c.push_back(__x); } // 出队操作 void pop() { c.pop_front(); } }; // 判断队列是否相等 template <class _Tp, class _Sequence> bool operator==(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) { return __x.c == __y.c; } // 判断队列大小 template <class _Tp, class _Sequence> bool operator<(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y) { return __x.c < __y.c; } ...
参考文献
STL源码剖析——侯捷
STL源码
相关文章推荐
- 浅析STL中的常用算法
- STL区间成员函数及区间算法总结
- C#队列Queue用法实例分析
- c++ STL容器总结之:vertor与list的应用
- C++在成员函数中使用STL的find_if函数实例
- 用PHP写的基于Memcache的Queue实现代码
- 关于STL中list容器的一些总结
- C#队列Queue多线程用法实例
- Mysql Error Code : 1436 Thread stack overrun
- linux中编写自己的并发队列类(Queue 并发阻塞队列)
- 关于STL中的map容器的一些总结
- 基于java中stack与heap的区别,java中的垃圾回收机制的相关介绍
- vector,map,list,queue的区别详细解析
- 浅析stl序列容器(map和set)的仿函数排序
- STL list链表的用法详细解析
- stl容器set,map,vector之erase用法与返回值详细解析
- STl中的排序算法详细解析
- 关于STL中vector容器的一些总结
- 关于STL中set容器的一些总结
- Laravel 4.2 中队列服务(queue)使用感受