C++系列-STL容器之stack

news2024/9/28 23:30:53

STL容器之stack

  • stack容器的概念
  • stack的构造函数及接口
  • stack的注意事项


浣溪沙·簌簌衣巾落枣花 苏轼

簌簌衣巾落枣花,村南村北响缲车。牛衣古柳卖黄瓜。
酒困路长惟欲睡,日高人渴漫思茶。敲门试问野人家。


stack容器的概念

  • stack容器是一种容器适配器(通过封装某个序列式容器,并重新组合该容器中包含的成员函数,使其满足某些特定场景的需要)。
  • stack容器提供了一种后进先出的数据结构, LIFO 。
  • stack容器并不直接存储元素,而是在已有的容器如vector,deque,list等上进行封装,只提供特定的操作接口,限值了对底层容器的访问方式,使其行为有点类似于栈。

在这里插入图片描述

stack的构造函数及接口

template <class _Ty, class _Container = deque<_Ty>>,默认底层封装的容器是deque。

  • stack stk, stack的默认构造函数,
  • stack(const stack &stk), 拷贝构造函数
code:
#include <iostream>
#include <stack>
#include <deque>
using namespace std;

template<typename T>
void print_pop_stack(stack<T> & stk)		// 这里不能用const,因为内部pop改变了stack
{
	while (!stk.empty())			// stack有empty用法,判断stack是否为空
	{
		cout << stk.top() << " ";	// 返回栈顶元素
		stk.pop();					// 从栈顶移除最后一个元素
	}
	cout << endl;
}

void test01()
{
	deque<int> d1{1, 2, 3};
	stack<int> stk1(d1);	// 用deque创建
	stack<int> stk2(stk1);	// 拷贝构造
	stk1.push(10);
	stk1.push(20);
	stk1.push(30);

	cout << "\n---------- stk1 ----------" << endl;
	cout << "stk1.size(): " << stk1.size() << endl;
	print_pop_stack<int>(stk1);
	cout << "\n---------- stk2 ----------" << endl;
	cout << "pop stack, stk2.size(): " << stk2.size() << endl;
	print_pop_stack<int>(stk2);		// 模板实现的方式是显式指定类型
	cout << stk2.size() << endl;

	stack<char> stk3;				// 默认构造
	stk3.push('a');
	stk3.push('b');
	cout << "\n---------- stk3 ----------" << endl;
	cout << "stk3.size(): " << stk3.size() << endl;
	print_pop_stack(stk3);			// 模板实现的方式是自动类型推导

}
int main()
{
	test01();
	system("pause");
	return 0;
}

result:
---------- stk1 ----------
stk1.size(): 6
30 20 10 3 2 1

---------- stk2 ----------
pop stack, stk2.size(): 3
3 2 1
0

---------- stk3 ----------
stk3.size(): 2
b a

stack的注意事项

  • stack不提供直接访问栈中元素的方法(在不改变stack的情况下,是无法访问所有元素的),只能通过 top() 访问栈顶元素。
  • 尝试在空栈上调用 top() 或 pop() 将导致未定义行为。
  • stack的底层容器可以是任何支持随机访问迭代器的序列容器,默认是deque。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云数智服务创新挑战赛总决赛铜奖比赛攻略_NJUSME队

关联比赛: 阿里云数智服务创新挑战赛——服务调度比赛 下面我们将从赛题场景、核心算法以及算法的场景拓展对我们的解决方案进行说明。 1 赛题场景 首先对赛题场景进行分析。我们建立流程图&#xff0c;梳理整体的调度流程。首先客户会先进入系统&#xff0c;定位问题明确问…

cesium 雪积压效果(customShader)

cesium 雪积压效果 原理&#xff1a;不同于后处理&#xff0c;这里采用的是customShader 优点&#xff1a;不用模型法线&#xff0c;仅模型雪覆盖 效果图

Qt (12)【Qt窗口 —— 消息对话框 QMessageBox 】

阅读导航 引言一、消息对话框简介二、问题提示消息对话框创建三、信息提示消息对话框创建四、警告信息消息对话框创建五、错误提示消息对话框创建 引言 在上一篇文章中&#xff0c;我们一同探索了Qt框架中窗口与对话框的奥秘&#xff0c;特别是那些由Qt内置提供的、功能丰富且…

公安的实名认证如何对接?

实名认证已成为许多在线服务和应用的必要环节。本文将为您详细介绍如何对接公安的实名认证系统,包括主要合作方、对接流程以及技术细节。 1. 中盾安信简介 北京中盾安信科技发展有限公司(简称"中盾安信")是公安部第一研究所的全资子公司。作为国家"互联网"…

这 3 个开源项目 牛逼的飞起

分享几个 git 上好玩的应用&#xff0c;对独立开发程序感兴趣的小伙伴欢迎关注后期圈&#xff5e; 点个赞呗 01个性化桌面状态栏的神器 开源地址&#xff08;自行添加网址&#xff09;&#xff1a;/polybar/polybar 一个让无数开发者和桌面美化爱好者爱不释手的开源项&#x…

VBA学习(67):Excel VBA 提取数字/自定义工作表函数/正则表达式/批量提取电话号码

正则表达式&#xff08;Regular Expression&#xff09;&#xff0c;又称为“正则式”、“规则表达式”、“常规表示法”&#xff0c;是一种用来匹配、查找、替换字符串的工具。它通过一定的符号、元字符和操作符的组合来表达一个特定的模式&#xff0c;从而匹配符合该模式的字…

opencv实战项目十八:Gabor滤波器提取布料纹理

文章目录 前言一、Gabor简介二、cv2.getGaborKernel&#xff08;&#xff09;三&#xff0c;效果&#xff1a; 前言 在计算机视觉和图像处理领域&#xff0c;纹理分析一直是一个热门且富有挑战性的话题。纹理&#xff0c;作为图像中的一种重要视觉特征&#xff0c;不仅承载着丰…

关于BitConverter.GetBytes取得的值是反的问题

通过百度查询450000转16进制&#xff0c;我们得到的值是6DDD0&#xff0c; 在前面补零之后的值应该是0006DDD0。如下图所示。 实际上我们用BitConverter.GetBytes 方法转换450000为byte[] 的时候, 转换后的值用16进制显示为D0DD0600(因为我这里是一个通讯协议的数据传输前转换&…

回归预测 | Matlab实现GWO-BP-Adaboost灰狼算法优化BP神经网络集成学习多输入单输出回归预测

回归预测 | Matlab实现GWO-BP-Adaboost灰狼算法优化BP神经网络集成学习多输入单输出回归预测 目录 回归预测 | Matlab实现GWO-BP-Adaboost灰狼算法优化BP神经网络集成学习多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GWO-BP-Adaboost灰…

GMS——利用 ChatGPT 和扩散模型进行制造业革命

概述 论文地址&#xff1a;https://arxiv.org/abs/2405.00958 研究介绍了生成式制造系统&#xff08;GMS&#xff09;&#xff0c;并表明这些系统能有效管理和协调自主制造资产&#xff0c;提高它们对不同生产目标和人类偏好的响应能力和灵活性。 与传统的显式建模不同&#…

嵌入式Linux学习笔记-Linux基础操作

一、Linux 目录结构 二、文件基础操作 Linux 命令一般由三部分组成&#xff0c;命令 选项 参数。 1、pwd&#xff1a;列出当前所在路径 pwd //列出当前所在目录 2、cd&#xff1a;切换路径 cd /home/boot //切换路径为/home/boot cd .. //返回上一级目录…

鸿蒙(API 12 Beta3版)【自定义界面扫码】

基本概念 自定义界面扫码能力提供了相机流控制接口&#xff0c;可根据自身需求自定义扫码界面&#xff0c;适用于对扫码界面有定制化需求的应用开发。 说明 通过自定义页面扫码可以实现应用内的扫码功能&#xff0c;为了应用更好的体验&#xff0c;推荐同时[接入“扫码直达”…

海信电视与《黑神话 :悟空》合作,大屏端流畅游戏体验如何保障?

上线即巅峰 国产3A游戏引发热潮 近期&#xff0c;首款国产3A游戏《黑神话&#xff1a;悟空》自上线以来&#xff0c;便迅速在各大游戏平台占据热销榜首&#xff0c;其销量及在线人数均刷新历史记录。同时&#xff0c;该游戏在各大社交媒体中也拥有超高讨论度&#xff0c;其精湛…

在Ubuntu24.04上安装多主多从的高可用Kubernetes节点

前言 因为镜像拉取失败&#xff0c;所以好多小伙伴说calico网络插件安装失败。之前写过CentOS7上安装多主节点的Kubernets集群&#xff0c;而CentOS7又停止维护了。所以借着在Ubuntu上安装多主的Kubernetes集群的机会&#xff0c;使用国内镜像安装calico网络插件。 视频教程地…

Git实现代码托管

在电脑端下载git:Git - 安装 Git (git-scm.com) 点击继续下载&#xff1a;一直next即可 下载完毕 winR:cmd 输入&#xff1a;git 不报错即可 登录 gitee账号&#xff0c;根据教程完成内容即可创建成功 &#xff01;&#xff01;一定要先登录邮箱账号…

深度学习环境安装与验证指南

目录 1. 项目背景 2. 系统与软件版本 2.1 操作系统与硬件 2.2 软件版本 2.3对应版本 3. 环境配置步骤 3.1 安装 Anaconda 3.2 创建虚拟环境 3.3 安装 CUDA 和 cuDNN 3.3.1 安装 CUDA 11.8 3.3.2 安装 cuDNN 8.6 3.3.3 验证 CUDA 和 cuDNN 安装 3.4 安装 TensorFlo…

国产网卡品牌崛起,做好网络信息安全的“守门人”

在信息技术日新月异的时代背景下&#xff0c;信息安全不仅关乎个人隐私保护&#xff0c;更是国家安全与经济发展的基石。LR-LINK联瑞凭借其前瞻性的视野和深厚的研发实力&#xff0c;成功自主研发出全国产化的FPGA&#xff08;现场可编程门阵列&#xff09;网闸隔离卡方案&…

企业园区智慧升级:电子墨水屏标签打造环保高科技工作空间

“双碳”目标和“数字中国”建设推动企业绿色转型。企业园区作为城市数字化的重要组成部分&#xff0c;传统纸质显示方式已不适应数字化转型的需求。墨水屏技术凭借低功耗和信息便捷更新的优势&#xff0c;成为园区数智显示的新方案&#xff0c;助力绿色数字化转型&#xff0c;…

网络科学导论,网络同步与控制

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

swf怎么转换成mp4格式?视频格式转换,就看这2个办法

许多用户在处理多媒体文件时经常遇到的问题swf文件的转换问题。swf文件作为Flash动画的标准格式&#xff0c;曾经在网页设计和互动媒体中占据重要地位。然而&#xff0c;随着技术的发展和Flash的逐渐淘汰&#xff0c;越来越多的用户需要将swf文件转换为更通用的视频格式&#x…