【C++】STL——stack的介绍和使用、stack的push和pop函数介绍和使用、stack的其他成员函数
文章目录
- 1.stack的介绍
- 2.stack的使用
- 2.1stack构造函数
- 2.1stack成员函数
- (1)empty() 检测stack是否为空
- (2)size() 返回stack中元素的个数
- (3)top() 返回栈顶元素的引用
- (4)push() 将元素val压入stack中
- (5)pop() 将stack中尾部的元素弹出
1.stack的介绍
stack的介绍

1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。
2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。
3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:
empty:判空操作
back:获取尾部元素操作
push_back:尾部插入元素操作
pop_back:尾部删除元素操作
4. 标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器,默认情况下使用deque。

2.stack的使用

2.1stack构造函数


stack类是一个容器适配器,它是基于其他容器类型(默认情况下是deque)实现的。stack类提供了一种后进先出(LIFO)的数据结构,类似于真实生活中的堆栈。
#include <iostream>
#include <stack>
#include <vector>int main() {// 示例1:使用默认构造函数创建一个空的stack对象。std::stack<int> myStack;// 示例2:使用拷贝构造函数创建一个与现有stack对象相同的新对象。std::stack<int> otherStack;otherStack.push(1);otherStack.push(2);std::stack<int> newStack(otherStack);// 示例3:使用构造函数模板创建一个基于vector的stack对象。std::stack<int, std::vector<int>> intStack;intStack.push(10);intStack.push(20);// 输出示例2中新创建的stack对象的元素std::cout << "示例2中新创建的stack对象的元素:";while (!newStack.empty()) {std::cout << newStack.top() << " ";newStack.pop();}std::cout << std::endl;// 输出示例3中基于vector的stack对象的元素std::cout << "示例3中基于vector的stack对象的元素:";while (!intStack.empty()) {std::cout << intStack.top() << " ";intStack.pop();}std::cout << std::endl;return 0;
}//示例2中新创建的stack对象的元素:2 1
//示例3中基于vector的stack对象的元素:20 10
2.1stack成员函数
(1)empty() 检测stack是否为空
empty()是stack类的一个成员函数,用于检查当前的stack是否为空。当stack中没有任何元素时,empty()函数返回true;当stack中至少有一个元素时,empty()函数返回false。
empty()函数的使用非常简单,只需在一个stack对象上调用该函数即可。以下是empty()函数的用法示例:
#include <iostream>
#include <stack>int main() {std::stack<int> myStack;// 检查stack是否为空if (myStack.empty()) {std::cout << "Stack is empty" << std::endl;} else {std::cout << "Stack is not empty" << std::endl;}// 将元素压入stackmyStack.push(10);myStack.push(20);// 再次检查stack是否为空if (myStack.empty()) {std::cout << "Stack is empty" << std::endl;} else {std::cout << "Stack is not empty" << std::endl;}return 0;
}//Stack is empty
//Stack is not empty
(2)size() 返回stack中元素的个数
size()是stack类的一个成员函数,用于获取当前stack中的元素数量。size()函数返回一个整数,表示stack中的元素数目。
size()函数的使用非常简单,只需在一个stack对象上调用该函数即可。以下是size()函数的用法示例:
#include <iostream>
#include <stack>int main() {std::stack<int> myStack;// 添加元素到stackmyStack.push(10);myStack.push(20);myStack.push(30);// 获取stack中的元素数量int stackSize = myStack.size();std::cout << "Stack size: " << stackSize << std::endl;// 弹出一个元素myStack.pop();// 再次获取stack中的元素数量stackSize = myStack.size();std::cout << "Stack size after pop: " << stackSize << std::endl;return 0;
}//Stack size: 3
//Stack size after pop: 2
(3)top() 返回栈顶元素的引用
top()是stack类的一个成员函数,用于获取stack顶部(即最后压入的)的元素的值,而不会将该元素从stack中移除。
top()函数的使用非常简单,只需在一个stack对象上调用该函数即可。以下是top()函数的用法示例:
#include <iostream>
#include <stack>int main() {std::stack<int> myStack;// 添加元素到stackmyStack.push(10);myStack.push(20);myStack.push(30);// 获取stack顶部的元素值int topElement = myStack.top();std::cout << "Top element: " << topElement << std::endl;return 0;
}//Top element: 30
(4)push() 将元素val压入stack中
push()是stack类的一个成员函数,用于将一个元素压入(即添加)到stack的顶部。
push()函数的使用非常简单,只需在一个stack对象上调用该函数并传递要压入的元素作为参数即可。以下是push()函数的用法示例:
#include <iostream>
#include <stack>int main() {std::stack<int> myStack;// 将元素压入stackmyStack.push(10);myStack.push(20);myStack.push(30);// 获取stack顶部的元素值int topElement = myStack.top();std::cout << "Top element: " << topElement << std::endl;return 0;
}//Top element: 30
(5)pop() 将stack中尾部的元素弹出
pop()是stack类的一个成员函数,用于移除stack顶部(即最后压入的)的元素,但并不返回该元素的值。
pop()函数的使用非常简单,只需在一个stack对象上调用该函数即可。以下是pop()函数的用法示例:
#include <iostream>
#include <stack>int main() {std::stack<int> myStack;// 添加元素到stackmyStack.push(10);myStack.push(20);myStack.push(30);// 移除stack顶部的元素myStack.pop();// 获取新的stack顶部的元素值int topElement = myStack.top();std::cout << "Top element after pop: " << topElement << std::endl;return 0;
}//Top element after pop: 20
相关文章:
【C++】STL——stack的介绍和使用、stack的push和pop函数介绍和使用、stack的其他成员函数
文章目录 1.stack的介绍2.stack的使用2.1stack构造函数2.1stack成员函数(1)empty() 检测stack是否为空(2)size() 返回stack中元素的个数(3)top() 返回栈顶元素的引用(4)push() 将元素…...
基于BIM+AI的建筑能源优化模型【神经网络】
推荐:用 NSDT设计器 快速搭建可编程3D场景。 AEC(建筑、工程、施工)行业的BIM 技术,允许在实际施工开始之前虚拟地建造建筑物; 这带来了许多有形和无形的好处:减少成本超支、更有效的协调、增强决策权等等。…...
#P0998. [NOIP2007普及组] 守望者的逃离
题目背景 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。 题目描述 守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。 为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛…...
vue3+ts+elementui-plus二次封装弹框
一、弹框组件BaseDialog <template><div classmain><el-dialog v-model"visible" :title"title" :width"dialogWidth" :before-close"handleClose"><!-- 内容插槽 --><slot></slot><template…...
ffmpeg批量分割视频解决视频前几秒黑屏的问题解决
echo 请输入视频地址: set /p fp echo 请输入开始时间: set /p st echo 请输入结束时间: set /p et echo 请输入分片时间: set /p sgt echo 注意:循环范围参数要空格。 for /l %%i in (%st%, %sgt%, %et%) do call :aa…...
nodejs + express 调用本地 python程序
假设已经安装好 nodejs ; cd /js/node_js ; 安装在当前目录的 node_modules/ npm install express --save 或者 cnpm install express --save web 服务器程序 server.js const http require(http); const express require(express); const path require(path); const …...
微信小程序代码优化3个小技巧
抽取重复样式 样式复用 我们会发现很多时候在开发的过程中会存在多个页面中都用到了同样的样式,那么其实之前有提到过,公用样式可以放在app.wxss里面这样就可以直接复用。 如:flex布局的纵向排列,定义在app.wxss里面 .flex-co…...
某行动态cookie反爬虫分析
某行动态cookie反爬虫分析 1. 预览 反爬网址(base64): aHR0cDovL3d3dy5wYmMuZ292LmNu 反爬截图: 需要先加载运行js代码,可能是对环境进行检测,反调试之类的 无限debugger 处理办法 网上大部分人说的都是添加cookie来解决。 那个noscript…...
恒运资本:A股、港股全线爆发,沪指突破3300点,恒指重返2万点上方
7月31日,两市股指高开高走,沪指在金融、地产、酿酒等权重板块的带动下一举突破3300点。截至发稿,沪指、深成指、创业板指涨幅均超1%,上证50指数涨近2%。Wind数据显现,北向资金净买入超25亿元。 职业方面,券…...
Rust vs Go:常用语法对比(十二)
题图来自 Rust vs Go in 2023[1] 221. Remove all non-digits characters Create string t from string s, keeping only digit characters 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. 删除所有非数字字符 package mainimport ( "fmt" "regexp")func main() { s : hei…...
jmeter接口测试、压力测试简单实现
jmeter测试的组件执行顺序: 测试计划—>线程组—>配置元件—>前置处理器—>定时器—>逻辑控制器—>取样器—>后置处理器—>断言—>监听器 组件的作用范围: 同级组件同级组件下的子组件父组件 目前市面上的三类接口 1、基…...
PysparkNote006---pycharm加载spark环境
pycharm配置pyspark环境,本地执行pyspark代码 spark安装、添加环境变量不提了 File-Settings-Project-Project Structure-add content root添加如下两个路径 D:\code\spark\python\lib\py4j-0.10.7-src.zipD:\code\spark\python\lib\pyspark.zip 2023-07-26 阴 于…...
19套项目实战系列--Spring Cloud Spring Boot(整套源码)
整套大型项目源码,需要的回复私信:19 ┃ ┣━01.19套项目实战系列 ┃ ┃ ┣━第04套【项目实战】Spring Cloud分布式微服务实战,打造大型自媒体3大业务平台 分布式前后端分离项目分层聚合 养成应对复杂业务的综合技术能力 ┃ ┃ ┃ ┣━1-…...
TCP/IP协议详解(二)
目录内容 TCP协议的可靠性 TCP的三次握手 TCP的四次挥手 C#中,TCP/IP建立 三次握手和四次挥手常见面试题 在上一篇文章中讲解了TCP/IP的由来以及报文格式,详情请见上一篇文章,现在接着来讲讲TCP/IP的可靠性以及通过代码的实现。 在TCP首部的…...
Linux6.2 ansible 自动化运维工具(机器管理工具)
文章目录 计算机系统5G云计算第一章 LINUX ansible 自动化运维工具(机器管理工具)一、概述二、ansible 环境安装部署三、ansible 命令行模块1.command 模块2.shell 模块3.cron 模块4.user 模块5.group 模块6.copy 模块7.file 模块8.hostname 模块9.ping …...
前端面试题 —— React (二)
目录 一、React 组件中怎么做事件代理?它的原理是什么? 二、React.Component 和 React.PureComponent 的区别 三、Component, Element, Instance 之间有什么区别和联系? 四、React声明组件有哪几种方法,有什么不同?…...
【分享帖】LCD的MCU接口和SPI接口详解
LCD(Liquid Crystal Display)液晶屏,作为电子产品的重要组成部分,是终端用户与电子产品交互的重要载体。现在市场上的LCD,按照尺寸、功能、接口、用途等分为很多种,本文主要介绍如下两种LCD物理接口&#x…...
【Java】使用@Expose注解和excludeFieldsWithoutExposeAnnotatGson()方法将toJson()过程的部分字段忽略
要在使用 Gson 的 toJson() 方法时忽略 List 中的某些字段,你可以使用 Gson 的 Expose 注解和 excludeFieldsWithoutExposeAnnotation() 方法。 首先,在 List 中的 Bean 类中,使用 Expose 注解标记你想要序列化的字段: public c…...
移动硬盘不显示怎么办?正确解决方式看这里!
移动硬盘为存储带来了很大的方便,在对数据存储时,可做到即插即用,且其体积小、容量大,且比较安全可靠。但在实际的使用中,也会出现各种问题。请看下面2个常见案例。 案例1:“各位朋友,我新买了一…...
MySQL 5.7.39 关于时间精度
前情提要 当EndTime的数据类型为datetime when the end_time’s dataType is datetime; entity.EndTime DateTime.MaxValue; context.Set<T>().Add(entity);当保存 ‘9999-12-31 23:59:59’ 这个值时,发生报错。 A crash has happended in the program when saving ‘…...
华为eNSP ACL实战:基于服务与网段的多维度访问控制
1. 华为eNSP ACL实战入门指南 第一次接触华为eNSP的ACL配置时,我也被那些规则搞得头晕眼花。直到有次公司内网出了安全问题,老板要求我立刻隔离市场部和研发部的网络访问,才逼着我真正搞懂了ACL的玩法。现在我就用最直白的语言,带…...
TinyNAS子网硬件感知编译:针对T4 GPU的CUDA kernel自动调优
TinyNAS子网硬件感知编译:针对T4 GPU的CUDA kernel自动调优 1. 项目概述 1.1 这是什么技术? TinyNAS子网硬件感知编译是一项专门针对NVIDIA T4 GPU优化的深度学习编译技术。它通过智能分析神经网络结构和硬件特性,自动生成最优的CUDA kern…...
科哥IndexTTS2 V23应用案例:虚拟主播语音定制,情感控制更强
科哥IndexTTS2 V23应用案例:虚拟主播语音定制,情感控制更强 1. 引言:虚拟主播语音定制的新标杆 在虚拟主播行业蓬勃发展的今天,语音表现力已成为决定用户体验的关键因素。传统语音合成系统往往只能提供机械化的朗读效果…...
FUTURE POLICE语音对齐系统:MySQL数据库集成与结果分析实战
FUTURE POLICE语音对齐系统:MySQL数据库集成与结果分析实战 1. 语音对齐数据管理的挑战与解决方案 语音识别与对齐技术正在改变我们处理音频内容的方式。FUTURE POLICE系统凭借其毫秒级精度的强制对齐能力,为语音数据处理树立了新标准。然而࿰…...
结合AI改写技术与五个技巧,快速优化论文查重率至合格范围
嘿,大家好!我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题:论文重复率飙到30%以上怎么办?别慌,我这就分享5个实用降重技巧,帮你一次搞定,轻松压到合格线以下。这些方法都是我亲身试验过的&a…...
MCP协议实战踩坑:当Claude Desktop遇上n8n 1.93.0的混合通信
MCP协议深度解析:从混合通信模型看AI Agent生态兼容性挑战 当Claude Desktop与n8n 1.93.0的MCP协议实现相遇时,表面上的连接故障背后隐藏着AI Agent通信架构的深层设计哲学差异。本文将带您穿透现象看本质,揭示不同MCP实现方案背后的技术权衡…...
DownKyi:解决B站视频下载痛点的创新方案——从低效操作到高效管理的完整实践
DownKyi:解决B站视频下载痛点的创新方案——从低效操作到高效管理的完整实践 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频…...
AI早报 | 2026.03.29(周日)
🤖 AI 早报 | 2026.03.29(周日) 采集时间:2026-03-29 13:25 (Asia/Shanghai) 🛡️ 安全/治理 1️⃣ Anthropic 安全漏洞泄露下一代模型 Mythos Anthropic 公司遭遇数据安全事件,未受保护的数据存储中泄露了…...
相对位置偏置在视觉Transformer中的应用:为什么Swin Transformer离不开它?
相对位置偏置:视觉Transformer中空间建模的隐形引擎 在计算机视觉领域,Transformer架构正逐步取代传统CNN成为图像理解的新范式。然而,将最初为序列数据设计的Transformer直接应用于二维图像数据时,一个关键挑战浮现:…...
如何用ImageSharp实现高效大数据处理:数据流管道与IAsyncEnumerable应用指南
如何用ImageSharp实现高效大数据处理:数据流管道与IAsyncEnumerable应用指南 【免费下载链接】ImageSharp :camera: A modern, cross-platform, 2D Graphics library for .NET 项目地址: https://gitcode.com/gh_mirrors/im/ImageSharp ImageSharp是一个现代…...
