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

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

文章目录

  • 一、 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> 头文件 ;

#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 类型对象 ;

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

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

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

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

// 打印栈顶元素
std::cout << "栈顶元素 : " << s.top() << std::endl;

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

// 出栈
s.pop();

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

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

代码示例 :

#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、执行结果


执行结果 :

栈顶元素 : 3
栈顶元素 : 2
栈顶元素 : 1
请按任意键继续. . .

在这里插入图片描述

相关文章:

  • 【C->Cpp】深度解析#由C迈向Cpp(2)
  • 装箱和拆箱(js的问题)
  • 在 Laravel 中,清空缓存大全
  • 神经网络:深度学习优化方法
  • 制造行业定制软件解决方案——工业信息采集平台
  • Kafka怎么保证消息发送不丢失
  • 那些年的随笔
  • 第一次记录QPSK,BSPK,MPSK,QAM—MATLAB实现
  • Unity内置的四种渲染管线简介
  • Python遥感影像深度学习指南(1)-使用卷积神经网络(CNN、U-Net)和 FastAI进行简单云层检测
  • 【c++】string类的使用
  • 实在没货,简历(软件测试)咋写?
  • SpringSecurity6 | 失败后的跳转
  • Tomcat日志乱码了怎么处理?
  • Qt/QML编程学习之心得:QML和C++的相互调用(十五)
  • Docker 笔记(2):Dockerfile
  • java中的hashCode
  • Joomla 2.x, 3.x useful code cheatsheet
  • magento2项目上线注意事项
  • python 学习笔记 - Queue Pipes,进程间通讯
  • 测试如何在敏捷团队中工作?
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 动态魔术使用DBMS_SQL
  • 给新手的新浪微博 SDK 集成教程【一】
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前嗅ForeSpider采集配置界面介绍
  • 我是如何设计 Upload 上传组件的
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用element的upload组件实现多图片上传和压缩
  • 阿里云API、SDK和CLI应用实践方案
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #Linux(make工具和makefile文件以及makefile语法)
  • #pragma pack(1)
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (九)One-Wire总线-DS18B20
  • (六)vue-router+UI组件库
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (算法)Travel Information Center
  • (五)关系数据库标准语言SQL
  • (一)VirtualBox安装增强功能
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .gitignore文件设置了忽略但不生效
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .Net(C#)常用转换byte转uint32、byte转float等
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [android] 看博客学习hashCode()和equals()
  • [C/C++] -- 二叉树