queue单向队列与栈 有点类似,一个是在同一端存取数据,另一个是在一端存入数据,另一端取出数据。单向队列中的数据是先进先出(First In First Out,FIFO)。在STL中,单向队列也是以别的容器作为底部结构,再将接口改变,使之符合单向队列的特性就可以了。因此实现也是非常方便的。下面就给出单向队列的函数列表和VS2008中单向队列的源代码。单向队列一共6个常用函数(front()、back()、push()、pop()、empty()、size() ),与栈 的常用函数较为相似。
VS2008中queue单向队列的源代码
友情提示:初次阅读时请注意其实现思想,不要在细节上浪费过多的时间。
<span style= "font-size:18px;" > template < class _Ty, class _Container = deque<_Ty> > class queue { public : typedef _Container container_type; typedef typename _Container::value_type value_type; typedef typename _Container::size_type size_type; typedef typename _Container::reference reference; typedef typename _Container::const_reference const_reference; queue() : c() { } explicit queue( const _Container& _Cont) : c(_Cont) { } 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()); } void push( const value_type& _Val) { c.push_back(_Val); } void pop() { c.pop_front(); } const _Container& _Get_container() const { return (c); } protected : _Container c; };</span>
可以看出,由于queue只是进一步封装别的数据结构 ,并提供自己的接口,所以代码非常简洁,如果不指定容器,默认是用deque来作为其底层数据结构的(对deque不是很了解?可以参阅 《STL系列之一deque双向队列》 )。下面给出单向队列的使用范例:
#include <queue> #include <vector> #include <list> #include <cstdio> using namespace std; int main() { queue<int , list< int >> a; queue<int > b; int i; for (i = 0; i < 10; i++) { a.push(i); b.push(i); } printf("%d %d\n" , a.size(), b.size()); printf("%d %d\n" , a.front(), a.back()); printf("%d %d\n" , b.front(), b.back()); while (!a.empty()) { printf("%d " , a.front()); a.pop(); } putchar('\n' ); while (!b.empty()) { printf("%d " , b.front()); b.pop(); } putchar('\n' ); return 0; }
转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/6950917