queue单向队列与栈有点类似,栈是在栈顶存取数据,queue是在队尾存入数据,队头取出数据。单向队列中的数据是先进先出(First In First Out,FIFO)。在STL中,单向队列也是以别的容器作为底部结构,再将接口改变,使之符合单向队列的特性就可以了。
queue没有类似vector, list等的iterator迭代器, 所以不能够通过iterator进行遍历, 要遍历queue, 可以通过front, pop等操作进行组合。
一、模板
template <class T, class Container = deque<T> > class queue;
queue 模板类的定义在<queue>头文件中。
与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。
二、函数使用
构造函数:
创建一个空的queue: queue <int> q1;
queue <double> q2;//默认deque容器
复制queue:
vector<int> a;
queue<int, vector<int> b(a);
数据基本操作:
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素(队首),注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()
<pre name="code" class="cpp" style="color: rgb(68, 68, 68); font-size: 16px; line-height: 28px;">#include <stdafx.h>
#include <iostream>
#include <list>
#include <queue>
#include <string>
using namespace std;
void show(list<int>& l)
{
cout << "list: ";
for(list<int>::iterator it = l.begin(); it != l.end(); ++it)
cout << *it << ' ';
cout << endl;
}
void show(queue<int, list<int> > q)
{
cout << "queue: ";
while(!q.empty()){
cout << q.front() << ' ';
q.pop();
}
cout << endl;
}
int main()
{
list<int> int_lst;
int_lst.push_back(1);
int_lst.push_back(2);
int_lst.push_back(3);
int_lst.push_front(0);
//show list
show(int_lst);
queue<int, list<int> > int_que(int_lst);
//push
cout << "push 4 into queue" << endl;
int_que.push(4);
show(int_que);
//front and back element
cout << "front: " << int_que.front() << endl;
cout << "back: " << int_que.back() << endl;
//pop
cout << "pop element" << endl;
int_que.pop();
show(int_que);
//size
cout << "size of queue: " << int_que.size() << endl;
return 0;
}