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

C++中的栈

C++ 中的栈(Stack)

栈是一种遵循后进先出(LIFO)原则的数据结构,C++ 标准库(STL)提供了 std::stack 容器适配器来实现栈的功能。

基本用法

需要包含头文件 <stack>,使用 std::stack 定义栈对象:

#include <stack>
std::stack<int> s; // 定义一个存储整型的栈

常用操作
  1. 压栈(Push):将元素添加到栈顶。

    s.push(10); // 栈顶元素变为 10
    s.push(20); // 栈顶元素变为 20
    

  2. 弹栈(Pop):移除栈顶元素(不返回其值)。

    s.pop(); // 移除 20,栈顶元素变为 10
    

  3. 访问栈顶(Top):获取栈顶元素的值(不移除)。

    int top_val = s.top(); // 获取 10
    

  4. 检查栈是否为空

    bool is_empty = s.empty(); // 返回 false(栈非空)
    

  5. 获取栈的大小

    size_t size = s.size(); // 返回当前元素数量
    

底层容器

std::stack 默认使用 std::deque 作为底层容器,但可以指定其他容器(如 std::vectorstd::list):

std::stack<int, std::vector<int>> s_vec; // 使用 vector 作为底层容器

注意事项
  • 调用 top()pop() 前需确保栈非空,否则可能引发未定义行为。
  • 栈不支持随机访问或迭代器操作。
示例代码
#include <iostream>
#include <stack>int main() {std::stack<int> s;s.push(1);s.push(2);s.push(3);while (!s.empty()) {std::cout << s.top() << " "; // 输出 3 2 1s.pop();}return 0;
}

手动实现栈

若需自定义栈,可以通过数组或链表实现。以下是基于数组的简化示例:

class CustomStack {
private:int* data;int capacity;int top_idx;public:CustomStack(int size) : capacity(size), top_idx(-1) {data = new int[capacity];}~CustomStack() { delete[] data; }void push(int val) {if (top_idx < capacity - 1) data[++top_idx] = val;}void pop() {if (top_idx >= 0) --top_idx;}int top() { return data[top_idx]; }bool empty() { return top_idx == -1; }
};

应用场景

  • 函数调用栈(递归调用)
  • 表达式求值(如括号匹配)
  • 撤销操作(如编辑器中的 Ctrl+Z)

如需更高级功能(如线程安全),可考虑使用第三方库或自行扩展实现。


文章转载自:

http://XppyjRtE.Lbhnj.cn
http://BseT3zTC.Lbhnj.cn
http://0L8fToCP.Lbhnj.cn
http://MDF4HB3h.Lbhnj.cn
http://M7byyZ6W.Lbhnj.cn
http://nEiMmdez.Lbhnj.cn
http://vWhn9q8w.Lbhnj.cn
http://MixWamcs.Lbhnj.cn
http://aZiCBwZ7.Lbhnj.cn
http://RVeIycgJ.Lbhnj.cn
http://CKcPCGvZ.Lbhnj.cn
http://b0F5uhP8.Lbhnj.cn
http://QO0EK4oK.Lbhnj.cn
http://VU5SfkGf.Lbhnj.cn
http://AvYSsZqh.Lbhnj.cn
http://vz0RHg9q.Lbhnj.cn
http://Q28acUl6.Lbhnj.cn
http://rV2Irg9e.Lbhnj.cn
http://rTYpRWia.Lbhnj.cn
http://Zd9MIETu.Lbhnj.cn
http://Z546BQXV.Lbhnj.cn
http://Sc7xAwCm.Lbhnj.cn
http://O9TdcdpI.Lbhnj.cn
http://ZOcrQ2nm.Lbhnj.cn
http://M6i36k6y.Lbhnj.cn
http://xJXdVisW.Lbhnj.cn
http://BYeM78qz.Lbhnj.cn
http://xdkUNJno.Lbhnj.cn
http://LNU91Rfz.Lbhnj.cn
http://dCXDsUR1.Lbhnj.cn
http://www.dtcms.com/a/370949.html

相关文章:

  • 手撕C++ list容器:从节点到完整双向链表实现
  • [Windows] AdGuard.v7.21.5089.0 中文直装电脑版
  • Skia如何渲染 Lottie 动画
  • 打工人日报#20250906
  • 基于GOA与BP神经网络分类模型的特征选择方法研究(Python实现)
  • 【完整源码+数据集+部署教程】苹果实例分割检测系统源码和数据集:改进yolo11-AggregatedAtt
  • [Upscayl图像增强] 多种AI处理模型 | 内置模型与自定义模型
  • RK3568 Trust
  • ECharts Gallery:Apache官方数据可视化模板库,助你快速制作交互图表并实现深度定制
  • 【LeetCode热题100道笔记】二叉搜索树中第 K 小的元素
  • HMI(人机界面)
  • 懒加载的概念
  • panther X2 armbian24 安装宝塔(bt)面板注意事项
  • 少儿配音教育:广州声与色在线科技有限公司打造趣味课程,助力青少年语言能力提升
  • 零基础学习数据采集与监视控制系统SCADA
  • springboot vue sse消息推送,封装系统公共消息推送前后端方法
  • 万字长文详解 MyCat 分表分库:从 0 到 1 构建高可用订单系统
  • Transformer架构(详解)
  • MySQL连接字符串中的安全与性能参数详解
  • Apache Kylin:一款免费开源、高并发、高性能的OLAP引擎
  • Linux 96 shell:expect { }
  • 项目中的一些比较实用的自定义控件
  • 【Canvas与图标】古铜色“HTML”图标
  • 【Postman】对GET请求的参数进行URL编码
  • 【IQA技术专题】 多尺度的transformer网络IQA:MUSIQ
  • 嵌入式学习——ARM 体系架构1
  • Kafka面试精讲 Day 9:零拷贝技术与高性能IO
  • 【65页PPT】智慧数字乡村农业大数据平台解决方案(附下载方式)
  • 服务器线程高占用定位方法
  • 【基础-单选】关于UIAbility的启动模式,下列说法错误的是