LIFO-Queue
先进先出数据结构,底层默认使用Deque,不可以遍历,尾端加入,首端取出。
同样的源代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
template<class T, class Sequence = deque<T>> class queue { 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_type reference_type; typedef typename Sequence::const_reference const_reference; protected: Sequence c; //底层容器 public: //基于底层容器的实现 bool empty() const { return c.empty(); } size_type size() const { return c.size(); } reference front() { return c.front(); } const_reference front() { return c.front(); } reference back() { return c.back(); } const_reference back() { return c.back(); } void push(const value_type& x) { c.push_back(x); } void pop() { 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; } |
和Stack很像的,实际上我就是复制了一部分Stack的代码然后修改的…
同样,Queue没有迭代器,Queue只能先进先出,Queue不提供遍历功能。
同样的,list也可以作为底层容器。但是不推荐用Vector…(原因是…自己想)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <queue> #include <list> #include <iostream> #include <algorithm> using namespace std; int main() { queue<int, list<int>> iqueue; iqueue.push(1); iqueue.push(3); iqueue.push(5); iqueue.push(7); cout << iqueue.size() << endl; //4 cout << iqueue.front() << endl; //1 iqueue.pop(); cout << iqueue.front() << endl; //3 iqueue.pop(); cout << iqueue.front() << endl; //5 iqueue.pop(); cout << iqueue.front() << endl; //7 cout << iqueue.size() << endl; //1 } |
原因是:Vector在头部插入和删除都太慢了!!!
【STL】Queue