小学生学C++编程语法知识(STL容器(4、认识Queue(队列)))

发布时间:2026/7/19 16:49:31
小学生学C++编程语法知识(STL容器(4、认识Queue(队列))) STL课程第四课《排队王国——认识Queue队列》本课目标理解什么是队列Queue。掌握队列先进先出FIFO的特点。熟练使用push()、pop()、front()、back()、empty()、size()。能用 Queue 解决简单的排队问题。为后面学习BFS广度优先搜索打下基础。第一幕 排队买冰淇淋炎热的夏天。程序王国举行了冰淇淋节。冰淇淋店门口来了许多小朋友。他们按照顺序排好了队。队首 队尾 小明 → 小红 → 小刚 → 小美请问如果冰淇淋做好了。应该给谁学生都会回答当然是小明因为他最早排队。请问小明拿到冰淇淋以后。队伍变成什么样 小红 → 小刚 → 小美又做好一个。应该给谁当然小红。总结谁先来谁先服务。这就是队列Queue第二幕 什么叫先进先出先进先出英文叫FIFOFirst In First Out意思就是先进去的人。先出来。例如排队买票。排队打饭。排队坐公交。都是先进先出。一句口诀先来的先走后来的后走。第三幕 Queue长什么样今天。我们请出Queue。首先#includeiostream #includequeue using namespace std;Queue不是数组。也不是Vector。它只能两头操作。画图队首 队尾 ↑ ↑ front back第四幕 创建队列创建一个整数队列。queueint q;解释queue表示队列。int里面放整数。q变量名字。第五幕 新同学来排队——push()现在。来了一个同学。编号1q.push(1);队伍1又来了2q.push(2);队伍1 2继续。q.push(3);队伍1 2 3push永远从队尾进入。第六幕 发冰淇淋——pop()现在。开始发冰淇淋。q.pop();谁离开当然1队伍变成2 3pop永远删除队首。第七幕 看看谁排第一现在。谁站在最前面直接问q.front()例如coutq.front();输出2front。就是队首。第八幕 看看最后一个是谁队伍最后是谁q.back()例如coutq.back();输出3第九幕 队伍还有多少人请问现在还有几个人q.size()例如coutq.size();输出2第十幕 队伍空了吗如果所有人都走了。怎么办直接问q.empty()例如if(q.empty()) { cout没人排队; } else { cout还有人; }第十一幕 Queue不能这样做请问Vector可以a[3]Queue呢很多孩子会写q[3]❌错误为什么因为。排队的时候。你不能直接跑到队伍中间。把第三个人拉出来。Queue只能看到队首。和队尾。所以没有q[0] q[1]这种写法。第十二幕 Queue也不能遍历老师继续问。Vector可以for(int x:a)Queue可以吗答案不能。为什么因为。Queue不允许随便查看中间的人。只能不断出队。例如while(!q.empty()) { coutq.front() ; q.pop(); }输出1 2 3最后。队列也空了。第十三幕 演示程序#includeiostream #includequeue using namespace std; int main() { queueint q; q.push(10); q.push(20); q.push(30); cout队首q.front()endl; cout队尾q.back()endl; cout人数q.size()endl; q.pop(); cout新的队首q.front()endl; return 0; }输出队首10 队尾30 人数3 新的队首20第十四幕 课堂演示依次执行q.push(5); q.push(8); q.push(2); q.pop(); q.push(9);问队伍是什么同学们画图开始空↓5↓5 8↓5 8 2↓8 2↓8 2 9最后。队首8队尾9第十五幕 课堂实践实践一打印排队顺序输入5 10 20 30 40 50表示5个人排队。要求按排队顺序输出。参考程序#includeiostream #includequeue using namespace std; int main() { queueint q; int n; cinn; for(int i0;in;i) { int x; cinx; q.push(x); } cout出队顺序endl; while(!q.empty()) { coutq.front() ; q.pop(); } return 0; }输出10 20 30 40 50第十六幕 课堂实践二——医院叫号系统医院来了很多病人。输入病人编号。按照叫号顺序输出。孩子会发现Queue特别适合排队问题。第十七幕 Queue真正的大本领老师告诉学生。今天。我们只是认识Queue。真正厉害的地方。在以后。同学们学习BFS广度优先搜索例如迷宫。最短路。机器人找出口。树的层次遍历。全部都要用Queue。所以。今天一定要学扎实。本课总结今天我们认识了 STL 中的Queue队列。它最大的特点就是先进先出FIFOFirst In First Out。掌握了六个最常用的成员函数成员函数作用生活中的理解push(x)从队尾加入元素新同学排到队伍最后pop()删除队首元素最前面的同学离开front()查看队首元素看第一个排队的人back()查看队尾元素看最后一个排队的人size()队列中的元素个数数一数队伍里有几个人empty()判断队列是否为空看看还有没有人在排队Queue 与 Vector 对比VectorQueue可以随机访问❌ 不可以可以a[3]❌ 不支持可以排序❌ 不支持排序可以遍历❌ 不能直接遍历可以中间插入❌ 不可以尾部增加最快队尾加入、队首删除最快最后强调Queue 不是功能少而是专门解决排队问题。它牺牲了随机访问和排序能力换来了严格的先进先出顺序。也正因为如此它才成为BFS广度优先搜索和各种排队模拟题中不可替代的工具。