【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
请按任意键继续. . .

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/267639.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java】springmvc

文章目录 SpringMVC1、SpringMVC简单入门2、请求与响应2.1、请求映射路径2.2、接收请求参数2.3、接收请求体2.4、Convertor接口2.5、接收时间日期2.6、响应数据 3、REST风格RESTful快速开发 4、异常处理器5、拦截器5.1、拦截器制作5.2、拦截器三个方法的参数5.3、拦截器链 Spri…

excel统计分析——S-W正态性检验

参考资料&#xff1a; [1]马兴华,张晋昕.数值变量正态性检验常用方法的对比[J].循证医学,2014,14(02):123-128. 统计推断——正态性检验&#xff08;图形方法、偏度和峰度、统计&#xff08;拟合优度&#xff09;检验&#xff09;_sm.distributions.ecdf-CSDN博客 【统计学】…

智能优化算法应用:基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.向量加权平均算法4.实验参数设定…

LabVIEW与PID在温度测控系统中的应用

LabVIEW与PID在温度测控系统中的应用 本案例介绍LabVIEW在温度控制系统中的应用&#xff0c;特别是结合PID算法。项目使用abVIEW作为主要开发工具&#xff0c;配合NI PCI-7831R数据采集和控制设备&#xff0c;实现了高效的温度调节。 系统的核心在于LabVIEW的FPGA模块&#x…

基于JAVA的超市账单管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3.3 后端设计在这里插入图片描述 四、系统展示五、核心代码5.1 查询供应商5.2 查询商品5.3 新增超市账单5.4 编辑超市账单5.5 查询超市账单 六、免责说明 一、摘要 1.1 项目介绍 基于…

游戏服务器列表-增量处理

前言&#xff1a;服务器列表比较简单 固定表/开服表&#xff08;一般只会增加及合并),操作频率很低 一般由 服务器ID IP NAME 开服时间 状态表 服务器ID 状态 这章主要针对 开服表 优化处理 这工具主要是配置前面openresty&#xff08;登录服/微中台&#xff09;给运维人员 使用…

【Pytorch】学习记录分享7——PyTorch数据增强/经典网络架构训练图像分类模型

【Pytorch】学习记录分享7——PyTorch 1. 数据增强、transform 模块数据预处理部分&#xff1a;网络模块设置&#xff1a;网络模型保存与测试 2. 迁移学习3. 参考pytorch官网例子 1. 数据增强、transform 模块 数据预处理部分&#xff1a; 数据增强&#xff1a;torchvision中…

MOSFET管驱动设计细节,波形分析

MOSFET管驱动设计细节,波形分析 Chapter1 MOSFET管驱动设计细节,波形分析MOSFET驱动芯片的内部结构MOS驱动电路设计需要注意的地方MOS管驱动电路参考MOS管驱动电路的布线设计常见的MOS管驱动波形高频振铃严重的毁容方波又胖又圆的肥猪波打肿脸充正弦的生于方波他们家的三角波大…

性能篇:字符串性能优化不容小觑

嗨&#xff0c;大家好&#xff01;我是小米&#xff0c;一个热衷于技术分享的小伙伴。今天&#xff0c;我们一起来聊一聊在Java中如何优化字符串性能&#xff0c;探讨一些令人激动的方法&#xff0c;让你的程序在处理字符串时更加高效&#xff01; 为什么String设计为不可变性…

微机原理与接口技术——并行I/O接口(8255A)

文章目录 一、内部结构、端口地址以及与系统总线的连接1、8255A的内部结构2、8255A的端口地址与读/写操作端口地址读/写操作 3、系统总线 二、8255A三种工作方式&#xff08;方式0 ~方式2 &#xff09;的工作特点和I/O过程工作方式工作特点 三、在方式1中C口哪几个引脚作为信号…

Plantuml之时序图语法介绍(二十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

无线路由器DHCP导致网络故障一例

多个DHCP故障 这几天公司网络很难用&#xff0c;也不知道原因。通过路由器的检测功能&#xff0c;领导截图如下&#xff1a; 故障解决 其实解决办法也很简单&#xff0c;就是关闭设备排查。结果发现是一个无线路由器导致的。进入路由器管理界面&#xff0c;关闭DHCP即可。 反思…

windows server 2008 R2 x64 基础知识(2)

一、防火墙设置 1.windows防火墙的种类&#xff1a; 1)工作组网络环境 2)域网络环境 2.防火墙的配置 1)打开管理工具&#xff1a;win->管理工具->高级安全windows防火墙 2)管理配置&#xff1a; (1)防火墙的数据流类型 a.入站流量&#xff1a;外部访问内部分流量 b…

Springsecurty【2】认证连接MySQL

1.前期准备 基于Spring Initializr创建SpringBoot项目&#xff08;基于SpringBoot 2.7.12版本&#xff09;&#xff0c;实现与MyBatisPlus的项目整合。分别导入&#xff1a;CodeGenerator和MyBatisPlusConfig。 CodeGenerator&#xff1a;用于MybatisPlus代码生成&#xff1b;…

Netty Review - 深入理解Netty: ChannelHandler的生命周期与事件处理机制

文章目录 概述CodeLifeCycleInBoundHandler 验证 概述 Netty的ChannelHandler是处理网络事件&#xff08;如数据读取、数据写入、连接建立、连接关闭等&#xff09;的核心组件。 在Netty中&#xff0c;ChannelHandler的生命周期与Channel的状态紧密相关&#xff0c;主要涉及到…

基于信道探测(Channel Sounding)的新一代低功耗蓝牙高精度测距技术原理详解

目录 1. 介绍 2. BLE HADM步骤 3. BLE HADM步骤一:设备同步 Synchronization 4. BLE HADM步骤二:跳频测相 Ranging 5. BLE HADM步骤三:交互相位信息,并计算距离 6. 发起设备和反射设备间的同步偏差问题 7. 总结 8. 参考文献 1. 介绍 在现今高度数字化与互联网普及的…

【AI提示词艺术】第12期 摄影艺术构图处理和人像生成的技巧

摄影艺术构图 星空宇宙 关键词&#xff1a; 强烈的明暗对比,8k,精细的描述,相片纸,超高分辨率,无建筑的,大自然,星空&#xff0c;云朵&#xff0c;刺眼流星&#xff0c;群星&#xff0c;银河&#xff0c;仰视视角&#xff0c;广角镜头 以下是按照提示词类别整理的相关描述&a…

常见的Ubuntu命令30条(一)

Ubuntu命令是指在Ubuntu操作系统中用于执行各种任务和操作的命令行指令。这些命令可以用于管理系统、配置网络、安装软件、浏览文件等。Ubuntu命令通常在终端&#xff08;Terminal&#xff09;应用程序中输入并执行。 在Ubuntu中&#xff0c;有许多常用的命令和指令。以下是一…

Windows漏洞利用开发——利用ROP绕过DEP保护

实验6 Windows漏洞利用开发 6.1实验名称 Windows漏洞利用开发 6.2实验目的 学习windows漏洞利用开发&#xff0c;使用kali linux相关工具对windows内目标程序进行漏洞利用 6.3实验步骤及内容 第三阶段&#xff1a;利用ROP绕过DEP保护 了解DEP保护理解构造ROP链从而绕过DEP…

RabbmitMQ基础

RabbmitMQ基础 1.1 什么是MQ MQ(Message Queue)&#xff0c;从字面意思看&#xff0c;本质是个队列&#xff0c;FIFO先入先出&#xff0c;队列中存放的是message。是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在互联网架构中&#xff0c;MQ是一种非常常见的上下游…