队列
2026-10-18 12:59:10
发布于:广东
防偷窥-------------------------------------------------------------------------------------------------------------------------------------------
防偷窥-------------------------------------------------------------------------------------------------------------------------------------------
防偷窥-------------------------------------------------------------------------------------------------------------------------------------------
防偷窥-------------------------------------------------------------------------------------------------------------------------------------------
防偷窥-------------------------------------------------------------------------------------------------------------------------------------------
防偷窥-------------------------------------------------------------------------------------------------------------------------------------------
防偷窥-------------------------------------------------------------------------------------------------------------------------------------------
防偷窥-------------------------------------------------------------------------------------------------------------------------------------------
防偷窥-------------------------------------------------------------------------------------------------------------------------------------------
防偷窥-------------------------------------------------------------------------------------------------------------------------------------------
防偷窥-------------------------------------------------------------------------------------------------------------------------------------------
包子铺开业啦
队列 Queue:先进先出 FIFO
入队 push → 队尾
出队 pop → 队头
- 概念对应
生活场景 队列术语 代码含义
走到队伍最后排队 入队 push(x)
第一个人买完离开 出队 pop()
老板看排在最前面的人 查看队头 front()
大妈看排在最后的人 查看队尾 back()
队伍没人了 判空 empty()
数一数有几个人 求长度 size() - 六个函数讲解
push(x):加入队伍
“小明来了,他不能插队,只能站到队伍最后面。这个过程就是 push(x)。”
queue<int> q;
q.push(10); // 10号顾客加入队尾
pop():买完离开
“排在第一位的人买完包子走了。注意,pop() 只负责让他离开,不负责把值给你看。”
q.pop(); // 队头元素离开,不返回值
front():看队头
“老板抬头看一眼:现在排在最前面的是谁?只看一眼,不让人走。”
cout << q.front(); // 返回队头元素
back():看队尾
“大妈往后看:谁是最后一个排队的?”
cout << q.back(); // 返回队尾元素
empty():队伍空了吗?
“天快黑了,老板看外面没人了,就准备关门。”
if (q.empty()) cout << "没人了";
size():还有几个人?
“老板娘问:外面还有几个人?老张数了一下,还有 5 个。”
cout << q.size(); // 返回队列元素个数
4. 完整示例
#include <bits/stdc++.h>
using namespace std;
int main(){
queue<int> q;
q.push(10); // 10号顾客排队
q.push(20); // 20号顾客排队
q.push(30); // 30号顾客排队
cout << "队头:" << q.front() << endl; // 10
cout << "队尾:" << q.back() << endl; // 30
cout << "人数:" << q.size() << endl; // 3
q.pop(); // 10号顾客买完离开
cout << "现在队头:" << q.front() << endl; // 20
cout << "现在人数:" << q.size() << endl; // 2
// 安全遍历队列
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}
cout << endl;
return 0;
}
输出:
队头:10
队尾:30
人数:3
现在队头:20
现在人数:2
20 30
- 避坑提醒
pop()** 不返回值**,要取值必须先用 front()。
调用 front()、back()、pop() 前,最好先用 empty() 判断队列是否为空。
队列不能像数组那样用下标访问,只能从队头取、队尾入。
遍历队列时,pop() 会让元素消失,所以遍历结束后队列会变空。
二、优先队列 priority_queue - 场景引入:VIP 插队机制
刚才普通队列排队买包子,讲究公平,先来后到。
但现在老张包子铺推出了 VIP 服务:不再看谁先来,而是看谁的‘身份牌’更大。
谁的数字最大,谁就有插队权,永远第一个买包子。
这种能自动排序、按优先级出队的队列,就是 优先队列 priority_queue。
priority_queue:优先队列
默认:数值越大,优先级越高
底层:堆
2. 默认规则:大数优先
priority_queue<int> q;
“如果什么都不写,默认规则就是:数字越大,越先出队。”
q.push(1);
q.push(5);
q.push(3);
cout << q.top() << endl; // 5
注意:优先队列用 top() 查看最高优先级元素,不用 front()
- 完整写法
priority_queue<int, vector<int>, less<int>> q;
三个参数含义:
参数 含义
int 队列里存什么类型
vector<int> 底层容器
less<int> 排序规则
重点提醒:
“less<int> 看起来像‘小’,但在优先队列里,它表示大数优先。
可以这样记:less 默认让大的先出来,greater 让小的先出来。”
- 小数优先写法
priority_queue<int, vector<int>, greater<int>> q;
“这种写法就是小数优先。比如急诊室排号,数字越小越紧急,越先处理。”
q.push(10);
q.push(3);
q.push(7);
cout << q.top() << endl; // 3
5. 常用函数
函数 作用
push(x) 入队
pop() 弹出最高优先级元素
top() 查看最高优先级元素
empty() 判断是否为空
size() 返回元素个数
注意:优先队列没有 front() 和 back(),只有 top()。
- 完整示例
#include <bits/stdc++.h>
using namespace std;
int main(){
// 大数优先
priority_queue<int> q1;
q1.push(1);
q1.push(5);
q1.push(3);
cout << "大数优先:";
while (!q1.empty()) {
cout << q1.top() << " ";
q1.pop();
}
cout << endl; // 5 3 1
// 小数优先
priority_queue<int, vector<int>, greater<int>> q2;
q2.push(1);
q2.push(5);
q2.push(3);
cout << "小数优先:";
while (!q2.empty()) {
cout << q2.top() << " ";
q2.pop();
}
cout << endl; // 1 3 5
return 0;
}
7. 顺口溜记忆
“优先队列玩 VIP,三个括号不能移。
底层箱子 vector,排序规则在最后。
less 表示大数先,greater 是小数前。”
- 避坑提醒
优先队列默认是大数优先。
取元素用 top(),不是 front()。
三个模板参数必须写全:priority_queue<int, vector<int>, greater<int>>。
同样要在 top()、pop() 前判断 empty()。
优先队列底层是堆,适合求最大值、最小值、Top-K 等问题。
这里空空如也


















有帮助,赞一个