C++ stack和queue容器使用_C++栈与队列数据结构实战
发布时间 - 2026-01-07 00:00:00 点击率:次C++中stack和queue是STL提供的容器适配器,分别用于实现后进先出(LIFO)和先进先出(FIFO)操作。stack支持push、pop、top等操作,常用于括号匹配等场景;queue提供front、back、push、pop等功能,适用于层序遍历(BFS)等应用。两者均需包含对应头文件并注意访问前判空,避免运行时错误。
在C++中,stack(栈)和queue(队列)是两种常用的数据结构,它们被包含在标准模板库(STL)中,分别定义于#include 和#include 头文件。虽然底层可以用vector、deque或list实现,但它们提供了一种更安全、更语义化的接口来处理“后进先出”和“先进先出”的逻辑。
stack 栈的基本使用
栈是一种后进先出(LIFO, Last In First Out)的数据结构。C++中的std::stack是一个容器适配器,它不支持遍历,只允许从一端(栈顶)进行操作。
常用操作包括:
- push(element):将元素压入栈顶
- pop():移除栈顶元素(不返回值)
- top():获取栈顶元素的引用
- empty():判断栈是否为空
- size():返回栈中元素个数
示例代码:
#include
#includeint main() { std::stack s; s.push(10); s.push(20); s.push(30); while (!s.empty()) { std::cout zuojiankuohaophpcnzuojiankuohaophpcn s.top() zuojiankuohaophpcnzuojiankuohaophpcn " "; s.pop(); } // 输出:30 20 10 return 0;}
queue 队列的基本使用
队列遵循先进先出(FIFO, First In First Out)原则。C++中的std::queue也是容器适配器,默认基于deque实现。
主要操作有:
- push(element):在队尾添加元素
- pop():删除队首元素(不返回值)
- front():访问队首元素
- back():访问队尾元素
- empty() 和 size():与stack一致
示例代码:
#include
#includeint main() { std::queue q; q.push(10); q.push(20); q.push(30); while (!q.empty()) { std::cout zuojiankuohaophpcnzuojiankuohaophpcn q.front() zuojiankuohaophpcnzuojiankuohaophpcn " "; q.pop(); } // 输出:10 20 30 return 0;}
实战应用场景举例
stack和queue在算法题和系统设计中非常实用。
使用 stack 判断括号匹配
遍历字符串,遇到左括号入栈,右括号时检查栈顶是否匹配并弹出。
bool isValid(std::string s) {
std::stack st;
for (char c : s) {
if (c == '(' || c == '[' || c == '{') {
st.push(c);
} else {
if (st.empty()) return false;
if ((c == ')' && st.top() != '(') ||
(c == ']' && st.top() != '[') ||
(c == '}' && st.top() != '{')) {
return false;
}
st.pop();
}
}
return st.empty();
}
使用 queue 实现层序遍历(BFS)
二叉树的广度优先搜索依赖队列保存待访问节点。
struct TreeNode {
int val;
TreeNode *left, *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void bfs(TreeNode root) {
if (!root) return;
std::queue> q;
q.push(root);
while (!q.empty()) {
TreeNode* node = q.front(); q.pop();
std::cout zuojiankuohaophpcnzuojiankuohaophpcn node-youjiankuohaophpcnval zuojiankuohaophpcnzuojiankuohaophpcn " ";
if (node-youjiankuohaophpcnleft) q.push(node-youjiankuohaophpcnleft);
if (node-youjiankuohaophpcnright) q.push(node-youjiankuohaophpcnright);
}}
基本上就这些。掌握stack和queue的接口和典型用法,能显著提升编码效率,特别是在处理递归模拟、状态暂存、广度搜索等场景时。注意不要误用top()或front()前未判空,否则会引发运行时错误。
# node
# 编码
# 栈
# ai
# c++
# ios
# stream
# include
# 字符串
# 递归
# 数据结构
# 接口
# 算法
# 遍历
# 返回值
# 是一个
# 头文件
# 是在
# 是一种
# 两种
# 可以用
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
无锡营销型网站制作公司,无锡网选车牌流程?
如何快速使用云服务器搭建个人网站?
如何在Windows环境下新建FTP站点并设置权限?
Laravel观察者模式如何使用_Laravel Model Observer配置
Laravel如何使用Livewire构建动态组件?(入门代码)
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Laravel storage目录权限问题_Laravel文件写入权限设置
高防服务器租用首荐平台,企业级优惠套餐快速部署
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
如何在橙子建站上传落地页?操作指南详解
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
独立制作一个网站多少钱,建立网站需要花多少钱?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
详解Oracle修改字段类型方法总结
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
Python正则表达式进阶教程_复杂匹配与分组替换解析
在线制作视频的网站有哪些,电脑如何制作视频短片?
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
iOS验证手机号的正则表达式
如何用y主机助手快速搭建网站?
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Laravel如何实现用户密码重置功能?(完整流程代码)
JavaScript如何实现音频处理_Web Audio API如何工作?
Swift中循环语句中的转移语句 break 和 continue
如何挑选高效建站主机与优质域名?
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
原生JS实现图片轮播切换效果
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
潮流网站制作头像软件下载,适合母子的网名有哪些?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
网站制作壁纸教程视频,电脑壁纸网站?
PythonWeb开发入门教程_Flask快速构建Web应用
Laravel如何使用Telescope进行调试?(安装和使用教程)
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
JavaScript如何实现错误处理_try...catch如何捕获异常?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何快速搭建高效WAP手机网站吸引移动用户?
python中快速进行多个字符替换的方法小结
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
Android自定义控件实现温度旋转按钮效果
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
phpredis提高消息队列的实时性方法(推荐)


FIFO)操作。stack支持push、pop、top等操作,常用于括号匹配等场景;queue提供front、back、push、pop等功能,适用于层序遍历(BFS)等应用。两者均需包含对应头文件并注意访问前判空,避免运行时错误。