Stack

487 字
2 分钟
Stack

核心概念#

  • 本质:容器适配器,后进先出(LIFO)数据结构
  • 头文件:#include <stack>
  • 命名空间:std::
  • 底层容器:默认使用 deque,也可指定 vector 或 list
  • 特点:只允许在栈顶进行插入和删除操作
  • 复杂度:所有操作的时间复杂度都是 O(1)

构造函数#

接口说明
stack<T> st;默认构造,创建空stack
stack<T> st(other_stack);拷贝构造
stack<T> st(container);使用指定底层容器构造
stack<T> st = other_stack;拷贝赋值

指定底层容器示例:#

stack<int> st1; // 默认使用deque
stack<int, vector<int>> st2; // 使用vector作为底层容器
stack<int, list<int>> st3; // 使用list作为底层容器

容量操作#

接口说明
st.empty()检查stack是否为空
st.size()返回元素数量

元素访问#

接口说明
st.top()返回栈顶元素的引用

修改器#

接口说明
st.push(value)将元素压入栈顶
st.pop()弹出栈顶元素
st.emplace(args...)在栈顶就地构造元素
st.swap(other_stack)交换两个stack的内容

非成员函数#

接口说明
swap(st1,st2)交换两个stack的内容
operator==相等比较
operator!=不等比较
operator<小于比较
operator<=小于等于比较

注意事项#

  1. 访问前检查:调用 top() 或 pop() 前必须确保栈不为空
  2. pop()不返回值:pop() 只移除元素,不返回元素值,需要先使用 top() 获取
  3. 底层容器限制:选择的底层容器必须支持 back(), push_back(), pop_back() 操作
  4. 迭代器:stack 不提供迭代器,无法直接遍历
  5. 异常安全:pop() 通常不抛出异常,但 top() 和 push() 可能抛出
  6. 性能考虑: · 默认 deque:平衡了头尾操作性能 · vector:可能涉及更多内存重新分配 · list:每个操作都是常数时间,但内存开销大

常见应用场景#

· 函数调用栈 · 表达式求值 · 括号匹配 · 深度优先搜索(DFS) · 撤销/重做功能 · 浏览器历史记录

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Profile Image of the Author
HandlerOne
おかえり
公告
本站已整理 138 篇技术笔记,并按 8 条主线排成学习路线(141 站);站内搜索与桌宠对话均已上线。
分类
标签
最新动态
站点统计
文章
138
分类
12
标签
42
总字数
597,044
站点信息
构建平台
腾讯云 · Nginx
博客版本
v6.16.8
文章目录