当前位置: 首页 > news >正文

STL——栈和队列和优先队列

C++标准模板库(STL)提供了丰富的数据结构,其中栈(stack)、队列(queue)和优先队列(priority_queue)是常用的容器适配器。它们各自有不同的应用场景和特点。本文将详细介绍它们的定义、用法及适用场景。

一、栈(Stack)

栈是一种后进先出(LIFO, Last In First Out)的数据结构。STL中的 std::stack容器适配器提供了栈的接口。

1. 栈的基本操作
  • push:将元素推入栈顶。
  • pop:移除栈顶元素。
  • top:访问栈顶元素。
  • empty:检查栈是否为空。
  • size:返回栈中元素的数量。
2. 栈的使用示例
#include <iostream>
#include <stack>int main() {std::stack<int> s;// 推入元素s.push(1);s.push(2);s.push(3);// 访问和移除栈顶元素while (!s.empty()) {std::cout << "Top element: " << s.top() << std::endl;s.pop();}return 0;
}
3. 栈的适用场景

栈适用于需要后进先出的场景,例如:

  • 括号匹配
  • 深度优先搜索(DFS)
  • 递归调用的模拟
二、队列(Queue)

队列是一种先进先出(FIFO, First In First Out)的数据结构。STL中的 std::queue容器适配器提供了队列的接口。

1. 队列的基本操作
  • push:将元素推入队尾。
  • pop:移除队首元素。
  • front:访问队首元素。
  • back:访问队尾元素。
  • empty:检查队列是否为空。
  • size:返回队列中元素的数量。
2. 队列的使用示例
#include <iostream>
#include <queue>int main() {std::queue<int> q;// 推入元素q.push(1);q.push(2);q.push(3);// 访问和移除队首元素while (!q.empty()) {std::cout << "Front element: " << q.front() << std::endl;q.pop();}return 0;
}
3. 队列的适用场景

队列适用于需要先进先出的场景,例如:

  • 广度优先搜索(BFS)
  • 任务调度
  • 打印队列
三、优先队列(Priority Queue)

优先队列是一种每次取出的元素都是具有最高优先级的元素的数据结构。STL中的 std::priority_queue提供了优先队列的接口。

1. 优先队列的基本操作
  • push:将元素推入优先队列。
  • pop:移除具有最高优先级的元素。
  • top:访问具有最高优先级的元素。
  • empty:检查优先队列是否为空。
  • size:返回优先队列中元素的数量。
2. 优先队列的使用示例
#include <iostream>
#include <queue>int main() {std::priority_queue<int> pq;// 推入元素pq.push(3);pq.push(1);pq.push(4);pq.push(1);pq.push(5);pq.push(9);// 访问和移除具有最高优先级的元素while (!pq.empty()) {std::cout << "Top element: " << pq.top() << std::endl;pq.pop();}return 0;
}
3. 优先队列的适用场景

优先队列适用于需要快速访问最高优先级元素的场景,例如:

  • 任务调度
  • 最短路径算法(如Dijkstra算法)
  • 事件驱动的模拟
四、总结

通过上述内容,我们详细介绍了C++ STL中的栈、队列和优先队列的定义、基本操作及适用场景。理解和掌握这些数据结构对于编写高效、清晰的代码至关重要。以下是对它们的概述:

  • 栈(stack) :后进先出,适用于递归、括号匹配等场景。
  • 队列(queue) :先进先出,适用于广度优先搜索、任务调度等场景。
  • 优先队列(priority_queue) :每次取出最高优先级元素,适用于任务调度、最短路径算法等场景

相关文章:

  • 【计组】真题 2015 大题
  • SELinux是什么以及如何编写SELinux策略
  • 【YOLO 系列】基于YOLO的飞机表面缺陷智能检测系统【python源码+Pyqt5界面+数据集+训练代码】
  • USB-C/HDMI 2.0 2:1 SW,支持4K60HZ
  • Vue3实现拖拽改变元素大小
  • 2025年ESWA SCI1区TOP,元组引导差分进化算法TLDE+黑箱优化,深度解析+性能实测
  • 蒙特卡罗模拟: 高级应用的思路和实例
  • LeetCode | 滑动窗口的原理及真题解析
  • 驱动:字符驱动操控硬件
  • Nginx部署vue项目, 无法直接访问其他路径的解决方案
  • PostgreSQL 技术峰会,为您打造深度交流优质平台
  • c++算法学习3——深度优先搜索
  • labelme安装及遇到的问题
  • C++STL-vector的使用
  • ocrapi服务docker镜像使用
  • 计算机网络安全问答数据集(1788条) ,AI智能体知识库收集! AI大模型训练数据!
  • [蓝桥杯]螺旋矩阵
  • 关于智能体API参考接口
  • GLM-4 模型
  • 【AI News | 20250605】每日AI进展
  • 做门户网站找哪家公司/在线生成个人网站app
  • 山东手工活外发加工网/东莞市网络seo推广服务机构
  • 商城网站建设企业/3步打造seo推广方案
  • 沈阳做网站的公司有哪些/网站优化网站
  • 视频网站制作费用/网站开发公司排行榜
  • 免费企业网站建站/营销号