std::stack是c++ stl基于底层容器(默认deque)实现的lifo容器适配器,仅支持push、top、pop、empty、size等栈顶操作,不支持随机访问或迭代器遍历,使用时需注意空栈检查及无clear成员函数等限制。

在C++中,std::stack 是 STL 提供的容器适配器,它基于底层容器(默认是 std::deque)实现后进先出(LIFO)行为。它不支持随机访问或遍历,只提供栈顶操作,用起来简单但需注意其“封闭接口”特性。
基本用法:声明、入栈与出栈
要使用 std::stack,需包含头文件 <stack></stack>。它是一个模板类,需指定元素类型:
- 声明方式:
std::stack<int> s;</int>(默认用deque作底层) - 入栈:
s.push(10);—— 将元素压入栈顶 - 查看栈顶:
s.top();—— 返回引用,不移除元素(栈非空时才安全) - 弹出栈顶:
s.pop();—— 移除栈顶元素,不返回值 - 判空:
s.empty();返回bool - 大小:
s.size();返回元素个数
指定底层容器(可选但实用)
std::stack 是适配器,允许你显式选择底层容器(必须支持 push_back、pop_back 和 back):
- 用
vector:std::stack<int std::vector>> s;</int> - 用
list:std::stack<int std::list>> s;</int> - 多数场景用默认即可;若需连续内存或已用
vector管理大量数据,可考虑切换以减少内存碎片
常见误区与注意事项
std::stack 的设计目标是抽象栈逻辑,因此有意屏蔽了部分能力:
Python v2.4版chm格式的中文手册,内容丰富全面,不但是一本手册,你完全可以把她作为一本Python的入门教程,教你如何使用Python解释器、流程控制、数据结构、模板、输入和输出、错误和异常、类和标准库详解等方面的知识技巧。同时后附的手册可以方便你的查询。
立即学习“C++免费学习笔记(深入)”;
- 不能用下标访问(如
s[0]),也不支持迭代器遍历 -
top()返回的是引用,修改它会直接影响栈中元素(例如s.top() = 42;合法) - 调用
top()或pop()前务必检查empty(),否则行为未定义 - 没有
clear()成员函数;清空可用循环while(!s.empty()) s.pop();,或用作用域控制生命周期
一个小而完整的示例
判断括号是否匹配(经典栈应用):
std::stack<char> stk;
for (char c : expr) {
if (c == '(' || c == '[' || c == '{') stk.push(c);
else if (!stk.empty() && ((c == ')' && stk.top() == '(') ||
(c == ']' && stk.top() == '[') ||
(c == '}' && stk.top() == '{'))) {
stk.pop();
} else return false;
}
return stk.empty();
这里只依赖 push、top、pop 和 empty,正是 stack 最自然的使用方式。
基本上就这些。它不复杂但容易忽略边界检查和底层限制——用对场景,它就是最干净的 LIFO 工具。









