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

C++中stack的用法

stack是C++STL里的栈容器适配器,严格遵守LIFO(先进后出):最后放进去的元素最先拿出来。

必须头文件:

#include<stack> #include<iostream> using namespace std;

或者

#include<bits/stdc++.h>//C++万能头文件 using namespace std;

一.基本定义

stack<数据类型>容器名

//stack的定义 stack<int>s1; //定义一个储存数据类型为int的stack容器s1 stack<double>s2; //定义一个储存数据类型为double的stack容器s2 stack<string>s3; //定义一个储存数据类型为string的stack容器s3 stack<结构体类型>s4; //定义一个储存数据类型为结构体类型的stack容器s4 stack<int> s5[N]; //定义一个储存数据类型为int的stack容器数组,N为大小 stack<int> s6[N]; //定义一个储存数据类型为int的stack容器数组,N为大小

二.stack中常用的成员函数

1.push(x):入栈(压栈)

把元素放在栈顶,栈长度+1

stack<int>ch; ch.push(10); ch.push(20); ch.push(30); //栈结构:底->10,20,30<-顶

2.top():取栈顶元素

只看不取,返回栈顶值,不删除

cout<<ch.top();//输出结果为30

注意:空栈调用top()会崩溃,使用前必须先判断

3.pop()出栈(弹栈)

只删不返回,删除栈顶元素

ch.pop();//删除30 cout<<ch.top.();//现在输出为20

注意:空栈调用pop()会也直接崩溃

4.empty():判断是否为空栈

空栈返回true,非空栈返回false

if(ch.empty()) cout<<"栈空"<<endl; else cout<<"栈非空<<endl;

5.size():获取元素个数

cout<<ch.size();//当前有两个元素,结果为2

6.swap():交换两个栈

stack<int>a,b; a.push(1); b.push(2); a.swap(b);

三.栈的遍历

stack不能用for循环和访问下标ch[i],只能循环取top->pop

#include <bits/stdc++.h> using namespace std; int main() { stack<int> ch; ch.push(1); ch.push(2); ch.push(3); // 只能从栈顶一个个拿 while (!ch.empty()) { cout << ch.top() << " "; ch.pop(); } // 输出:3 2 1 return 0; }

四.完整安全的写法

永远先判断空再top/pop,防止崩溃

#include <bits/stdc++.h> using namespace std; int main() { stack<int> st; st.push(5); st.push(6); st.push(7); // 安全遍历 while (!st.empty()) { int val = st.top(); cout << val << endl; st.pop(); } return 0; }

五、栈的底层原理(简单理解)
1.stack 不是独立容器,是“包装器”
2. 默认基于 deque (双端队列)
​3.只开放:尾部插入、尾部删除、尾部访问
​4.屏蔽了中间、头部的操作,保证只能栈顶操作

六.易错点总结(非常重要)

1. ❌ 不能 st[0] 、 st.begin() 、 st.end() 遍历

2. ❌ 空栈 top() / pop() 必崩溃

3. ❌ pop() 没有返回值,取值必须 top()

4. ✅ 操作永远只能在栈顶

5. ✅ 顺序一定:后进先出

http://www.jsqmd.com/news/866491/

相关文章:

  • Esp32Robot入门05-大模型接口对接与配置(实战进阶:对接Qwen3.6-35B本地大模型与API配置实战)
  • “一键生成”这四个字,骗了多少人
  • 2026计算机人士提升个人价值分析
  • # 西藏旅游团选哪家?2026年线路覆盖与服务模式解析 - 科技焦点
  • 外卖系统源码如何选择?校园外卖APP+小程序平台搭建指南
  • SCI论文中的地图与空间分析:ArcGIS Pro在水文水环境研究中的完整应用
  • NVIDIA Profile Inspector完全指南:解锁显卡700+隐藏设置,游戏性能提升30%
  • 华为发布AI DC数据基础设施全栈方案,重构AI时代数据底座
  • Antigravity cli 体验很差
  • 数学专业学数据分析的价值
  • NotebookLM多语言文档处理失效?立即检查这4个元数据字段——2024年Q2最新API行为变更已悄然上线
  • 三国杀卡牌DIY终极指南:5分钟打造你的专属武将
  • VSCode 打开超大日志文件卡顿崩溃怎么优化设置
  • 房地产Agent部署AI助手失败率高达68%?揭秘头部房企私有化部署的4层安全架构与合规红线(内部培训纪要流出)
  • 今年小满不一般,老辈农谚里藏着农事提醒
  • Spek音频频谱分析器:如何免费快速可视化音频频率的秘密世界
  • 十年机房从业者转行网安,从月薪五千逆袭年入百万
  • Subfinder终极指南:告别手动搜索,3分钟掌握高效字幕下载技巧
  • SQL 模糊查询 + NULL 空值。LIKE 通配符 % 和_、IS NULL
  • 从零基础到PPT大神,打造专业高颜值演示文稿
  • 沧州各区房屋反复漏水真实原因解析:多数维修问题出在工艺匹配度 - 鲁顺
  • LeagueAkari:英雄联盟玩家的智能工具箱完整指南
  • 添价收广州名表回收首选推荐:六家机构精准匹配,你的腕表该去哪家最划算 - 薛定谔的梨花猫
  • 终极风扇控制解决方案:如何用FanControl实现Windows系统精准温控
  • 曼德勃罗集的 Three.js 实现
  • NotebookLM P值不显示?3种隐藏调用方式+2个API绕过技巧,限时公开
  • 达梦数据创建备份文件脚本
  • 在多模型间灵活切换时Taotoken模型广场的选型体验
  • 莆田各区房屋反复漏水真实原因解析:多数维修问题出在工艺匹配度 - 鲁顺
  • 添价收领衔2026广州名表回收六强真机实测:五款腕表横评告诉你谁报价最高 - 薛定谔的梨花猫