C++ 队列 queue

队列简介

队列是一种特殊的线性表,按照先进先出(下文使用“FIFO”指代)的原则存储数据。具体来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

C++ queue 简介

std::queue 类是一种容器适配器,它是一种 FIFO 数据结构。通过它,程序员可以使用队列的功能。同时,std::queue 作为模板类,对存储的元素类型有着极高的灵活性。queue 使用的默认容器是 std::deque,但可以人为更换为其他 C++ 容器。

使用 queue

导入 queue 库

queue 在 < queue > 中定义为:

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

使用时要加入头文件 < queue >,同时,作为标准库,使用时还要使用名称空间 std。

// 头文件
#include <queue>
// 使用名称空间 std
using namespace std;
// 或者
using std::queue;

创建 queue 容器

queue 容器的创建依赖其的构造函数,下面用 int 类型举例,介绍几个常用的构造函数:

  1. 默认构造函数。值初始化容器。
// 函数声明原型为:queue();
queue<int> que;
  1. 复制构造函数。以 other 的内容复制构造适配器。
// 函数声明原型为:queue( const queue& other );;
queue<int> que_1;
queue<int> que_2(que_1);
  1. 以 cont 的内容复制构造底层容器。
// 函数声明原型为:queue( const Container& cont = Container() );
// 若不填写参数,其表现为默认构造函数,内部实现为 std::deque
queue<int> que;

// 若类模板处不填写所使用的底层容器,则函数参数处只能使用 std::deque 类
deque<int> deq;
queue<int> que(deq);
// 等价于
queue<int, deque<int>> que(deq);

// 若在类模板处指定所使用的底层容器,则函数参数处只能使用你所指定的容器
vector<int> arr = { 4, 3, 2, 1 };
queue<int, vector<int>> queue(arr);	// 构造后队头的值是 1

元素访问

  1. 访问第一个元素(队头)
queue<int> que;
// 函数声明原型为:const_reference front() const;
// 返回 queue 中首元素的引用。
que.front();
  1. 访问最后一个元素(队尾)
queue<int> que;
// 函数声明原型为:const_reference back() const;
// 返回 queue 中末元素的引用。
que.back();

容器容量相关

  1. 检查容器是否为空
queue<int> que;
// 函数声明原型为:bool empty() const;
// 检查底层容器是否为空
que.empty();
  1. 返回元素数量
queue<int> que;
// 函数声明原型为:size_type size() const;
// 返回容器适配器中的元素数
que.size();

容器内容修改相关

入队

  1. 向队列尾部插入元素
queue<int> que;
// 函数声明原型为:void push( value_type&& value );
// 将给定的元素 value 推到 queue 尾。
que.push(99);
  1. 在尾部原位构造元素
queue<int> que;
// 使用方法大致与 push 相同,函数原型略
// 推入新元素到队尾。原位构造元素,不进行移动或复制操作。
// 效率一般优于 push
que.emplace(99);

出队

即移除队首元素

queue<int> que;
// 函数声明原型为:void pop();
// 从 queue 移除前端元素。
que.pop();

参考资料

https://zh.cppreference.com/w/cpp/container/queue

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值