当前位置: 首页 > 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) :每次取出最高优先级元素,适用于任务调度、最短路径算法等场景
http://www.lqws.cn/news/157681.html

相关文章:

  • 谐波在线监测装置功能
  • Java八股文——集合「Queue篇」
  • LangchainRAG you need - 段落拆分
  • 欧拉公式简明推导
  • 【Android基础回顾】七:内存管理机制
  • 2025.5.28【33OJ NOI 模拟赛 T3】字符串(AC自动机, 字符串后缀结构)
  • Mybatis动态SQL语句
  • 【iSAQB软件架构】软件架构中构建块的视图:黑箱、灰箱和白箱及其交互机制
  • 2025年渗透测试面试题总结-腾讯[实习]玄武实验室-安全工程师(题目+回答)
  • 数据驱动的智驾十年 特斯拉、Momenta合流闯进Robotaxi卫冕之战
  • Java应用10(客户端与服务器通信)
  • Postman环境变量全局变量设置
  • Postman常见问题及解决方法
  • Perforce ALM产品简介:一站式需求与测试管理平台(已通过SO 26262认证)
  • 基于ResNet残差网络优化梯度下降算法实现图像分类
  • RKNN3588上部署 RTDETRV2
  • 深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
  • CSP-VP37th
  • 麒麟信安系统下修改系统默认记录日志大小
  • [arthas]arthas安装使用
  • vue+element-ui一个页面有多个子组件组成。子组件里面有各种表单,实现点击enter实现跳转到下一个表单元素的功能。
  • 成都芯谷金融中心·文化科技产业园:构建产业新城的实践与探索
  • 基于大数据爬虫+智能AI的网络小说数据可视化系统设计与实现
  • Unity基础-Mathf相关
  • 3ds Max 渲染技术突破:一键解锁照片级真实感!
  • 小程序引入deepseek
  • 每日算法-250605
  • xmind转换为markdown
  • QQ邮箱发送验证码(Springboot)
  • SDC命令详解:使用set_max_fanout命令进行约束