【C++ STL】queue队列容器的基本使用

queue容器

queue(队列)是 C++ STL 中的容器适配器,底层默认基于deque实现 (也可以指定为list),遵循先进先出 (FIFO) 原则 ------ 只能从队尾插入元素,从队首删除 / 访问元素,无法随机访问中间元素,非常适合模拟排队、任务调度等场景。 特点:

  • 封闭性:仅暴露队首(front)和队尾(back)操作,不支持迭代器遍历;
  • 适配器特性:可指定底层容器(如list),只要满足back()/push_back()/front()/pop_front()/empty()/size()接口即可;
  • 无迭代器:无法像vector/list那样遍历,只能逐个取出队首元素。

基本使用

  • 使用 queue 需包含 <queue>头文件;
c++ 复制代码
#include <queue>
  • 初始化
c++ 复制代码
// 1.定义一个空队列,默认底层使用deque容器
queue<int> q1;

// 2.指定底层容器为list
queue<int, list<int>> q2;

// 3、拷贝构造,可以是队列、链表和双端队列
// 需要保证底层容器是一致的
list<int> lst = { 0, 1, 2, 3 };
queue<int, list<int>> q3(lst);

queue<int, list<int>> q4(q2);

! 注意 使用queue的拷贝构造函数时,需要保证底层容器是一致的

核心操作API

  • empty()判断队列是否为空,返回 bool(空为 true)
  • size()返回队列中元素个数(unsigned int 类型)
  • front()返回队首元素的引用(可修改,需非空)
  • back()返回队尾元素的引用(可修改,需非空)
  • push(val)队尾插入元素 val
  • emplace(val)队尾直接构造元素(效率高于 push)
  • pop()删除队首元素(无返回值,需非空)
  • swap(q)交换两个同类型队列的内容
c++ 复制代码
	queue<int> q1;

	// 插入
	q1.push(10);
	q1.push(20);
	q1.push(30);
	q1.push(40);

	// 访问队首和队尾元素
	cout << q1.front() << endl;	// 10
	cout << q1.back() << endl;	// 40

	// 当前队列大小
	cout << "size = " << q1.size() << endl;

	// 删除队首元素
	q1.pop();
	cout << q1.front() << endl;	// 20

	// 判断队列是否为空
	if (q1.empty())
	{
		cout << "空" << endl;
	}

使用注意

  • 空队列操作风险 :调用 front()、back()、pop() 前必须用 empty() 判断队列非空,否则会触发未定义行为(程序崩溃)。
  • 无遍历能力 :queue 没有迭代器,无法用 for 循环遍历,若需遍历需先复制队列并循环 pop。
c++ 复制代码
queue<int> q1;

// 插入
q1.push(10);
q1.push(20);
q1.push(30);
q1.push(40);

// 遍历保留数据

// 1、先拷贝数据
queue<int> q2(q1);
// 2、遍历
while (!q2.empty()) 
{
	cout << q2.front() << endl;
	q2.pop();
}
  • 清空队列 :STL 的 queue 未提供 clear() 函数,需通过 while(!q.empty()) q.pop() 实现。
  • 底层容器替换 :若需指定 list 为底层容器,需保证底层容器支持 front()、back()、push_back()、pop_front()、empty()、size() 这些操作(deque/list 均满足)。

结束语

  • queue 是 FIFO 结构的容器适配器,仅支持队首 / 队尾操作,无随机访问和迭代器;
  • 核心操作:push()/emplace()(入队)、pop()(出队)、front()/back()(访问)、empty()/size()(状态查询);
  • 空队列调用 front()/back()/pop() 会导致未定义行为,使用前务必检查非空。
相关推荐
codigger1 天前
前端没有被杀死,被杀死的是"只会把设计稿变成页面"
前端·ai·ai编程·编程语言·全栈·#人工智能
全栈弄潮儿2 天前
Python实战第13期:模块与包
后端·python·编程语言
codigger2 天前
别再手动催 AI 干活了:一文读懂 Loop Engineering(循环工程)
ai·程序员·编程语言·#人工智能
晓蛋3 天前
什么是C语言
c语言·跨平台·编程语言·高级语言·低级语言
计算机魔术师4 天前
做前端 UI 的人,接下来得先过一道开源技能的"设计质检"
编程语言
苜蓿muxu5 天前
简述 ConcurrentHashMap 和 CopyOnWriteArrayList 的区别以及各自适用场景
java·编程语言
路就在脚下5 天前
2026最新Rust入门教程[18]:面向对象语言特性-trait 对象与多态
编程语言
路就在脚下6 天前
2026最新Rust入门教程[17]:异步编程基础-async、await、Future 与 Stream
编程语言
全栈弄潮儿7 天前
Python实战第11期:面向对象编程基础
后端·python·编程语言
全栈弄潮儿8 天前
Python实战第10期:异常处理
后端·python·编程语言