亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++ std::stack 完全指南:核心操作、实战示例与 STL 应用

什么是 std::stack?

std::stack 是实现 LIFO(后进先出)原则的容器适配器。仅允许从一端——栈顶——插入和移除元素。默认以 std::deque 作为底层容器,但也可提供任何序列容器(如 std::vector 或 std::list)。

容器适配器不暴露迭代器,无法直接遍历栈。只能通过成员函数交互。

学习目标

语法

包含 <stack> 头文件,按以下模板声明栈:

template<class T, class Container = std::deque<T>> class stack; 

成员类型

核心操作

实现概览

下图展示栈操作示意(箭头指向栈顶)。
C++ std::stack 完全指南:核心操作、实战示例与 STL 应用

push() 与 pop()

push() 追加新元素,大小加一:

stack.push(value);

pop() 移除栈顶元素,大小减一:

stack.pop();

示例 1:基础栈操作

#include <iostream> #include <stack> using namespace std; int main() { stack<int> st; st.push(10); st.push(20); st.push(30); st.push(40); st.pop(); // 移除 40 st.pop(); // 移除 30 while (!st.empty()) { cout << ' ' << st.top(); st.pop(); } return 0; }

输出:20 10

empty()、size()、top()

这些工具函数快速洞察栈状态。

示例 2:检查栈状态

#include <iostream> #include <stack> using namespace std; void display(stack<int> s) { while (!s.empty()) { cout << '\t' << s.top(); s.pop(); } cout << '\n'; } int main() { stack<int> st; st.push(32); st.push(21); st.push(39); st.push(89); st.push(25); cout << "The stack st is: "; display(st); cout << "\n st.size() : " << st.size(); cout << "\n st.top() : " << st.top(); st.pop(); cout << "\n st after pop: "; display(st); return 0; }

输出:展示栈内容、大小、栈顶元素、pop 后状态。

emplace() 与 swap()

• emplace() 原地构造元素,避免额外拷贝。
• swap() 高效交换两个栈的内容。

示例 3:使用 emplace() 与 swap()

#include <iostream> #include <stack> using namespace std; int main() { stack<int> st1, st2; st1.emplace(12); st1.emplace(19); st2.emplace(20); st2.emplace(23); st1.swap(st2); cout << "st1 = "; while (!st1.empty()) { cout << st1.top() << " "; st1.pop(); } cout << endl << "st2 = "; while (!st2.empty()) { cout << st2.top() << " "; st2.pop(); } } 

输出:演示交换前后两栈内容。

在 STL 中使用 std::stack

一行代码实现栈:

std::stack<T> st;

示例:

#include <iostream> #include <stack> using namespace std; int main() { stack<int> st; st.push(12); st.push(19); st.push(20); cout << st.top(); // 20 cout << st.size(); // 3 return 0; }

总结

C语言

  1. C++ 运算符全解析:类型、示例与示例程序
  2. C++ do-while 循环详解:语法、实战示例与嵌套循环
  3. 掌握 C++ switch-case:语法、用法与实战示例
  4. C++ 动态数组分配实战指南:new/delete、初始化、扩容与内存管理
  5. C++ 指针精通:核心概念、代码示例与实战应用
  6. C++ 运算符重载实战指南:语法、方法、限制与代码示例
  7. C++ 结构体详解:定义、初始化、指针、函数参数与局限性
  8. C++ std::map 完全指南:键值对容器、核心操作与实战代码
  9. 掌握 C++ std::list:语法、函数与实战示例
  10. C++ 函数详解:从声明到调用的实战指南
  11. C++ Struct 与 Class 核心差异、语法及最佳实践
  12. Python collections.Counter:高效计数、更新与算术运算