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

C++,STL容器适配器,stack:栈深入解析

请添加图片描述

文章目录

  • 一、容器概览与核心特性
    • 核心特性速览
  • 二、底层实现原理
    • 1. 容器适配器设计
    • 2. 默认容器对比
  • 三、核心操作详解
    • 1. 容器初始化
    • 2. 元素操作接口
    • 3. 自定义栈实现
  • 四、实战应用场景
    • 1. 括号匹配校验
    • 2. 浏览器历史记录管理
  • 五、性能优化策略
    • 1. 底层容器选择基准
    • 2. 内存预分配技巧
  • 六、注意事项与陷阱
    • 1. 常见错误操作
    • 2. 线程安全性问题
  • 七、C++新标准增强
    • 1. C++11 emplace优化
    • 2. C++17结构化绑定(需容器支持)
  • 总结与最佳实践
    • 选择栈的三大准则
    • 性能优化清单
    • 典型应用场景


一、容器概览与核心特性

std::stack是C++标准模板库(STL)提供的容器适配器,遵循后进先出(LIFO)原则。它基于底层容器(默认std::deque)封装实现,为栈操作提供统一接口。


核心特性速览

特性 说明
底层容器 默认deque,可指定list/vector
时间复杂度 push/pop/top均为O(1)
空间复杂度 与底层容器一致
迭代器支持 ❌ 不支持遍历操作
头文件 <stack>

二、底层实现原理

1. 容器适配器设计

stack通过组合现有容器实现功能,类声明原型:

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

支持的可选底层容器需满足以下接口:

  • back()

  • push_back()

  • pop_back()

  • empty()

  • size()


2. 默认容器对比

底层容器 优点 缺点
deque 快速首尾操作(默认最优解) 内存非连续
vector 内存连续,缓存友好 尾部扩容时性能抖动
list 稳定性能,无需扩容 内存碎片化,访问效率低

三、核心操作详解

1. 容器初始化


    // 默认使用deque
    stack<int> s1; 

    // 指定底层容器
    stack<string, vector<string>> s2;
    stack<double, list<double>> s3;

    // 通过已有容器初始化
    vector<int> vec {
   1,2,3};
    stack<int, vector<int>> s4(vec);  // 注意:复制容器内容

2. 元素操作接口

    stack<string> history;

    // 压栈操作
    history.push("page1");       // 拷贝插入
    history.emplace("page2");    // 原地构造(C++11)

    // 访问栈顶
    cout << "Current: " << history.top(); 

    // 弹栈操作
    history.pop();  // 注意:返回void,需先获取top()

    // 容量检查
    if (!history.empty()) {
   
        cout << "Stack size: " << history.size();
    }

3. 自定义栈实现


    template<typename T, typename Container = deque<T

相关文章:

  • docker compose部署flink集群
  • 【Vue中BUG解决】npm error path git
  • macOS 上部署 RAGFlow
  • 【经验分享】Linux 系统安装后内核参数优化
  • 微信小程序医院挂号系统
  • Visual Studio踩过的坑
  • Mac上搭建宝塔环境并部署PHP项目
  • 侯捷 C++ 课程学习笔记:C++ 新标准 11/14 的革新与实战应用
  • 【深入探讨 ResNet:解决深度神经网络训练问题的革命性架构】
  • Qt Designer菜鸟使用教程(实现一个本地英文翻译软件)
  • 《8天入门Trustzone/TEE/安全架构》
  • 从 0 开始本地部署 DeepSeek:详细步骤 + 避坑指南 + 构建可视化(安装在D盘)
  • 零基础入门机器学习 -- 第三章第一个机器学习模型——线性回归
  • java安全中的类加载
  • 【一文读懂】HTTP与Websocket协议
  • Java堆外内存的高效利用与性能优化
  • 【DeepSeek】DeepSeek小模型蒸馏与本地部署深度解析DeepSeek小模型蒸馏与本地部署深度解析
  • DevOps工具链概述
  • 【Unity3D优化】使用ASTC压缩格式优化内存
  • CNN-BiLSTM卷积神经网络双向长短期记忆神经网络多变量多步预测,光伏功率预测
  • 一旅客因上错车阻挡车门关闭 ,株洲西高铁站发布通报
  • 天算星座二期首批卫星成功发射,将助力6G空天信息基础设施建设
  • 全国游泳冠军赛:孙杨、潘展乐同进400自决赛,今晚将正面对决
  • 淮安市车桥中学党总支书记王习元逝世,终年51岁
  • 福州一宋代古墓被指沦为露天厕所,仓山区博物馆:已设置围挡
  • 澎湃与七猫联合启动百万奖金征文,赋能非虚构与现实题材创作