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

Leave a Reply