STL queue适配器

STL queue适配器教程

queue 适配器和 stack 栈容器适配器不同,queue 容器适配器有 2 个开口,其中一个开口专门用来输入数据,另一个专门用来输出数据。

STL queue适配器详解

语法

#include <queue> using namespace std;

说明

使用 queue 适配器,必须要引入 queue 适配器头文件。queue 容器适配器以模板类 queue<T,Container=deque<T>>(其中 T 为存储元素的类型,Container 表示底层容器的类型)的形式位于 <queue> 头文件中,并定义在 std 命名空间里。

图解

04_STL queue栈容器适配器.png

技术细节

其实,STL queue 容器适配器模拟的就是队列这种存储结构,因此对于任何需要用队列进行处理的序列来说,使用 queue 容器适配器都是好的选择。

STL queue适配器成员函数

成员函数列表

成员函数 功能
empty() 如果 queue 中没有元素的话,返回 true。
size() 返回 queue 中元素的个数。
front() 返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
back() 返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
push(const T& obj) 在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
emplace() 在 queue 的尾部直接添加一个元素。
push(T&& obj) 以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
pop() 删除 queue 中的第一个元素。
swap(queue &other_queue) 将两个 queue 容器适配器中的元素进行互换,需要注意的是,进行互换的 2 个 queue 容器适配器中存储的元素类型以及底层采用的基础容器类型,都必须相同。

说明

queue 容器适配器和 stack 有一些成员函数相似,但在一些情况下,工作方式有些不同。和 stack 一样,queue 也没有迭代器,因此访问元素的唯一方式是遍历容器,通过不断移除访问过的元素,去访问下一个元素。

案例

创建并使用queue适配器

创建一个 queue 适配器,并使用

#include <iostream> #include <queue> #include <list> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; std::deque<int> values{99, 1024, 100}; std::queue<int> my_queue(values); cout << "size of my_queue: " << my_queue.size() << endl; while (!my_queue.empty()) { cout << my_queue.front() << endl; my_queue.pop(); } return 0; }

我们在 Linux 下使用 g++ 进行编译,具体命令如下:

g++ queue.cpp -std=c++11

编译后,我们直接运行生成的二进制文件 a.out,如下图所示:

05_STL queue栈容器适配器.png

我们创建了一个 queue 适配器,并使用其访问了 deque 中的所有元素。

STL queue适配器总结

queue 适配器和 stack 栈容器适配器不同,queue 容器适配器有 2 个开口,其中一个开口专门用来输入数据,另一个专门用来输出数据。