队列是应用最广泛的数据结构之一,很多应用都是基于队列实现的。如系统中各种资源的调度,现实生活中排队系统的模拟等都需要用到队列。为此,C++在其标准模板库中实现了队列类,C++程序员在编程中需要用到队列时可以直接使用标准的模板库中的队列类。
与栈类似,队列本质上也是一个线性表,STL中的队列类是一个容器适配器,它是借助于list或者deque类实现的。STL中的队列提供了6个标准运算:入队操作push(调用底层的容器的push_back函数),出队操作pop(调用底层容器的pop_front函数),获得队头元素的操作front(调用底层容器的front函数),获得队尾元素的函数back(调用底层容器的back函数),判断队列为空的函数empty(调用底层容器的empty函数)以及获得队列长度的函数size(调用底层容器的size函数)。
定义一个队列对象要指明队列中元素的类型以及借助于哪一个容器,因此队列的类模板有两个模板函数参数:队列元素类型和所借助的容器类型。队列可以借助的容器有list和deque。队列类模板的第二个参数带有默认值deque,在使用时若不指明第二个参数,则表示底层容器是deque。下面的代码演示了STL中队列的使用:
#include <iostream>
#include <queue>
#include <list>
#include <deque>
using namespace std;
int main() {
queue<int, list<int>>q1;
queue<int, deque<int>>q2;
int i;
for (int i = 0; i < 10; ++i)
q1.push(i);
while (!q1.empty()) {
cout << q1.front() << " ";
q1.pop();
}
cout << endl;
for (int i = 0; i < 10; ++i)
q2.push(i);
while (!q2.empty()) {
cout << q2.front() << " ";
q2.pop();
}
cout << endl;
return 0;
}
输出为:
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
使用STL中的队列要包括头文件queue。在上述代码中定义了两个队列q1,q2,q1是基于list,q2是基于deque的。由于队列类的模板的第二个参数带有默认值deque,所以定义q2的时候第二个参数可以省略。