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
				
					