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

请添加图片描述


一、容器概览与核心特性

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值