生活随笔
收集整理的這篇文章主要介紹了
STL源码剖析 queue队列概述
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- queue是一種先進先出的數據結構,他有兩個出口
- 允許新增元素(從最底端 加入元素)、移除元素(從最頂端刪除元素),除了對于頂端和底端元素進行操作之外,沒有辦法可以獲取queue的其他元素
- 即queue沒有遍歷行為
?基于deque的queue
- 針對deque進行操作,封閉其底部的出口 和 前端的入口
- queue不被歸類為容器,而被歸類為容器適配器
//定義在stl_config.h文件中
//但是沒有找到 具體詳情參見 參考鏈接
# ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
# define __STL_NULL_TMPL_ARGS <>
# else
# define __STL_NULL_TMPL_ARGS
# endiftemplate <class T,class Sequence = std::deque<T>>
class queue{//__STL_NULL_TMPL_ARGS會展開為 <>friend bool operator== __STL_NULL_TMPL_ARGS(const queue& x,const queue& y);friend bool operator< __STL_NULL_TMPL_ARGS(const queue& x,const queue& y);
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() const {return c.size();}reference front() {return c.back();}const_reference front() const {return c.front();}reference back() const {return c.back();}const_reference back() {return c.back();}//deque 是兩頭可以進出,queue 是末端進,前端出 (所以先進者先出)void push(const value_type& x){ c.push_back(x);}void pop(){return c.pop_front();}
};template <class T,class Sequence>
bool operator==(const queue<T,Sequence>&x,const queue<T,Sequence>&y){return x.c == y.c;
}template <class T,class Sequence>
bool operator<(const queue<T,Sequence>&x,const queue<T,Sequence>&y){return x.c < y.c;
}
queue沒有迭代器
- 考慮到只有queue需要滿足先進先出的條件,只有頂端的元素才有機會被外界取用,因此 queue不需要提供遍歷元素的迭代器
基于list的queue
- queue需要的函數如 empty、size()、back、push_back、pop_back是鏈表也支持的
- 使用范例
#include <list>
#include <queue>int main()
{std::queue<int,std::list<int>>list_queue;list_queue.push(1);list_queue.push(3);list_queue.push(5);list_queue.push(7);std::cout << list_queue.size() << std::endl; //4std::cout << list_queue.front() << std::endl; //1list_queue.pop();std::cout << list_queue.front() << std::endl; //3list_queue.pop();std::cout << list_queue.front() << std::endl; //5list_queue.pop();std::cout << list_queue.front() << std::endl; //7std::cout << list_queue.size() << std::endl; //1
}
總結
以上是生活随笔為你收集整理的STL源码剖析 queue队列概述的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。