跳到主要内容

C++ STL 队列(Queue)

队列(Queue)是一种先进先出(FIFO)的数据结构,即元素从容器的一端插入并从另一端提取。在 C++ STL 中,队列被实现为容器适配器。这些类使用特定容器类的封装对象作为其底层容器,提供一组特定的成员函数来访问其元素。元素被推入特定容器的“后部”并从其“前部”弹出。

queue 语法

使用 queue 容器,必须先引入 <queue> 头文件。

#include <queue>

stack 模板类很相似,queue 模板类也需要两个模板参数。第一个参数是存储对象的类型,第二个参数是底层容器的类型。其中,元素类型是必要的,而容器类型是可选的,默认为 deque 类型。底层容器只需要支持 empty()size()push_back()pop_front()front()back() 等操作即可。

queue 容器适配器的模板定义如下:

template<class T, class Container = deque<T> > class queue;

queue 成员函数

借助函数,可以在编程领域中使用对象或变量。队列提供了大量可以在程序中使用或嵌入的函数。相同的列表如下:

函数说明
(constructor)该函数用于构造队列集合。
empty该函数用于测试队列是否为空。如果队列为空,则该函数返回 true,否则返回 false。
size该函数返回队列集合的大小,该大小是对队列中存储的元素数量的度量。
front该函数用于访问队列的前部元素。该元素起着非常重要的作用,因为所有删除操作都是在最前面的元素上进行的。
back该函数用于访问队列的后部元素。元素扮演一个角色成员函数将分配器用于队列。

queue 示例

下面演示如何创建 queue 队列容器,以及数据插入和提取的用法。

#include <iostream>
#include <queue>

using namespace std;

void show_queue(queue <int> q)
{
queue <int> qu = q;

while (!qu.empty()) {
cout << ' ' << qu.front();
qu.pop();
}
cout << '\n';
}

int main(void)
{
queue <int> q;

q.push(55);
q.push(44);
q.push(33);
q.push(22);
q.push(11);

cout << "The queue q is : ";
show_queue(q);

cout << "\n q.size() : " << q.size();
cout << "\n q.front() : " << q.front();
cout << "\n q.back() : " << q.back();

cout << "\n q.pop() : ";
q.pop();
q.pop();
show_queue(q);

return 0;
}

执行 g++ main.cpp && ./a.out 编译运行以上程序,输出结果如下:

The queue q is :  55 44 33 22 11

q.size() : 5
q.front() : 55
q.back() : 11
q.pop() : 33 22 11