前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】STL 容器 - stack 堆栈容器 ① ( stack 堆栈容器特点 | stack 堆栈容器与 deque 双端数组容器对比 | 简单示例 )

【C++】STL 容器 - stack 堆栈容器 ① ( stack 堆栈容器特点 | stack 堆栈容器与 deque 双端数组容器对比 | 简单示例 )

作者头像
韩曙亮
发布2023-12-24 08:18:13
1250
发布2023-12-24 08:18:13
举报
文章被收录于专栏:韩曙亮的移动开发专栏
文章目录
  • 一、 stack 堆栈容器简介
    • 1、stack 堆栈容器引入
    • 2、stack 堆栈容器特点
    • 3、stack 堆栈容器与 deque 双端数组容器对比
  • 二、 代码示例 - stack 堆栈容器简单示例
    • 1、代码示例
    • 2、执行结果

一、 stack 堆栈容器简介


1、stack 堆栈容器引入

C++ 语言中的 STL 标准模板库 中的 stack 堆栈容器 , 是一个 后进先出 ( LIFO , Last In First Out ) 的容器 , stack 容器提供了在栈顶进行插入和删除操作 ;

使用 stack 容器前 , 需要导入 <stack> 头文件 ;

代码语言:javascript
复制
#include "stack"

stack 堆栈容器 是在 deque 双端数组 的基础上 , 屏蔽了部分功能 实现的 ; deque 功能比 stack 功能要强大一些 ;

2、stack 堆栈容器特点

stack 堆栈容器特点 :

  • 后进先出 : LIFO , Last In First Out , 最后一个被插入的元素将是第一个被删除的元素 ;
  • 执行效率高 : 时间复杂度是 O(1) ;
  • 成员函数少 : 相比于 vector 动态数组 和 deque 双端数组 , stack 只提供很少的几个成员函数 ;
  • 异常安全 : stack 堆栈容器 可以保证 在出现异常时 , 数据完整 ;

3、stack 堆栈容器与 deque 双端数组容器对比

stack 堆栈容器与 deque 双端数组容器对比 :

  • 容器特点 :
    • stack 堆栈容器 是一种后进先出 LIFO 的数据结构 , 该容器只允许在一端进行插入和删除操作 ;
      • push() 方法 , 用于在堆栈顶部添加元素 ,
      • pop()方法用于从堆栈顶部删除元素 ,
      • 栈顶相当于 deque 或 vector 容器的尾部 ;
    • deque 双端数组容器 , 又称为 双端队列 , 是一种更为灵活的数据结构 , 该容器支持在队列的头部和尾部进行插入和删除操作 ;
  • 迭代器迭代 :
    • stack 堆栈容器 不提供迭代器 , 也不支持 在首部 插入 / 删除 元素 ;
    • Deque提供了迭代器,并支持队列的头部和尾部添加或删除元素 , 使用起来相对更为方便 ;
  • 主要用途 : stack 堆栈容器 的主要用途是保存按照后进先出顺序排列的元素 ; 例如保存程序的调用历史 ;
  • 子类实现 : deque 双端数组容器 有多种实现 , 如 : ArrayDeque / LinkedList ;

二、 代码示例 - stack 堆栈容器简单示例


1、代码示例

在下面的代码中 :

首先 , 创建了 stack 堆栈容器对象 , 容器中存储 int 类型对象 ;

代码语言:javascript
复制
    // 创建 stack 堆栈容器对象
    std::stack<int> s;

然后 , 向 stack 容器加入元素 , 又称为 入栈操作 , 将元素加入到栈顶 ;

代码语言:javascript
复制
    // 入栈操作  
    s.push(1);
    s.push(2);
    s.push(3);

再后 , 调用 std::stack#top() 函数 , 可以打印栈顶元素 ;

代码语言:javascript
复制
// 打印栈顶元素
std::cout << "栈顶元素 : " << s.top() << std::endl;

最后 , 调用 std::stack#pop() 函数 , 将栈顶元素弹出 ;

代码语言:javascript
复制
// 出栈
s.pop();

如果想要判定 stack 容器中的元素是否都弹出栈 , 可调用 std::stack#empty() 函数 进行判定 ;

代码语言:javascript
复制
    while (!s.empty()) {
        // 打印栈顶元素
        std::cout << "栈顶元素 : " << s.top() << std::endl;
        // 出栈
        s.pop();
    }

代码示例 :

代码语言:javascript
复制
#include "iostream"
using namespace std;
#include "stack"

int main() {

    // 创建 stack 堆栈容器对象
    std::stack<int> s;

    // 入栈操作  
    s.push(1);
    s.push(2);
    s.push(3);

    // 出栈操作  
    while (!s.empty()) {
        // 打印栈顶元素
        std::cout << "栈顶元素 : " << s.top() << std::endl;
        // 出栈
        s.pop();
    }

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

2、执行结果

执行结果 :

代码语言:javascript
复制
栈顶元素 : 3
栈顶元素 : 2
栈顶元素 : 1
请按任意键继续. . .
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、 stack 堆栈容器简介
    • 1、stack 堆栈容器引入
      • 2、stack 堆栈容器特点
        • 3、stack 堆栈容器与 deque 双端数组容器对比
        • 二、 代码示例 - stack 堆栈容器简单示例
          • 1、代码示例
            • 2、执行结果
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档