C++中的stack容器

news2024/11/25 16:45:05

文章目录

    • stack的介绍
    • stack的使用

stack的介绍

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

stack的使用

函数声明接口说明
stack()构造空的栈
empty()检测stack是否为空,为空返回真,否则返回假
size()返回stack中元素的个数
top()返回栈顶元素的引用
push()将元素压入stack中
pop()将stack中尾部的元素弹出
int main()
{
	deque<int> mydeque(3, 100);
	vector<int> myvector(2, 200);

	stack<int> first; // 空栈
	stack<int> second(mydeque); // 初始化,拷贝mydeque

	stack<int, vector<int>> third; // 用vector作为底层建栈
	stack<int, vector<int>> fourth(myvector);

	return 0;
}

  这里注意看数据类型,直接构造的栈,默认使用的是deque,而我们用stack<int, vector<int>>构造的栈则是使用了vector。
在这里插入图片描述

  empty是检测stack的size是否为0来判断是否为空的。
  push成员函数调用的是底层容器的push_back函数,实现尾插的功能。标准容器vector、deque、list都是拥有push_back这一成员函数的。
  pop成员函数则是调用的底层容器的pop_back函数,实现尾删的功能。同样的,这几个标准容器也是拥有pop_back这一成员函数的。
  因为stack的特性是先进后出,也就是说插入删除只会在尾部进行,所以没有push_front和pop_front,所以直接用push和pop来表示。

int main()
{
	stack<int> mystack;
	int sum(0);

	cout << mystack.empty() << endl;

	for (int i = 1; i <= 10; i++)
		mystack.push(i);

	cout << mystack.empty() << endl;

	while (!mystack.empty())
	{
		sum += mystack.top();
		mystack.pop();
	}
	cout << "total" << sum << endl;

	return 0;
}

在这里插入图片描述

  size函数实现则是因为stack本身就具有一个size_type属性。

int main()
{
	stack<int> myints;
	cout << "1.size:" << myints.size() << endl;

	for (int i = 0; i < 5; i++)
		myints.push(i);
	cout << "2.size:" << myints.size() << endl;

	myints.pop();
	cout << "3.size:" << myints.size() << endl;

	return 0;
}

在这里插入图片描述

  top成员函数是通过底层容器中的back函数实现的,back函数返回的是容器中的最后一个元素,正好符合top函数的功能。因为返回的是引用,所以可以被修改。

int main()
{
	stack<int> mystack;
	mystack.push(10);
	mystack.push(20);
	mystack.push(30);
	mystack.push(40);

	cout << "mystack.top():" << mystack.top() << endl;

	mystack.top() -= 5;
	cout << "mystack.top():" << mystack.top() << endl;

	return 0;
}

在这里插入图片描述

  在C++11中,stack的成员函数新增了emplace和swap,emplace的作用是插入一个新元素,并重新构造;swap则是交换内容。不过有一个非成员函数swap也可以实现这一功能。

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

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

相关文章

101-Linux_I/O复用方法之select

文章目录 1.select系统调用的作用2.select系统调用的原型3.集合fdset4.使用select实现TCP服务器(1)服务器端代码:(2)客户端代码(3)运行结果截图 1.select系统调用的作用 在一段指定时间内&#xff0c;监听用户感兴趣的文件描述符的可读、可写和异常等事件 2.select系统调用的…

Typora Markdown 中 LaTeX 公式居左、对齐的方法

我们知道公式块里的公式默认是居中的&#xff0c;我们想让公式居左&#xff08;顶着左页面&#xff09;可以使用如下格式的 flalign 数学环境&#xff1a; 不多说&#xff0c;先看示例 示例 \begin{flalign} &\iint_D\frac{\sin y}{y}{\rm d}\sigma\\ &\int_0^1{\rm…

【redis】redis分布式锁(二)可重入锁+设计模式

【redis】redis分布式锁&#xff08;二&#xff09;可重入锁 文章目录 【redis】redis分布式锁&#xff08;二&#xff09;可重入锁前言一、可重入锁&#xff08;又名递归锁&#xff09;1、说明&#xff1a;2、分开解释&#xff1a;3、可重入锁的种类隐式锁&#xff08;即synch…

Nautilus Chain 测试网第二阶段,推出忠诚度计划及广泛空投

随着更多的公链底层面向市场&#xff0c;通过参与早期测试在主网上线后获得激励成为了行业的一个热点话题&#xff0c;在Apots、Arbitrum One、Optimism等陆续发放了测试空投后&#xff0c;以Layer3为主要特性的Nautilus Chain也在前不久明确表示将会有空投&#xff0c;引发行业…

《嵌入式系统》知识总结3:STM32微控制器

STM32系列产品命名规则 以stm32f103zet6为例 Stm32微控制器架构 模块 • 处理器核心 • 存储器 • 时钟电路、系统总线 • 外设&#xff08;硬件单元&#xff09;&#xff1a;I/O接口、通信接口、定时器 、ADC和DAC&#xff0c; …… 系统结构 哈佛存储结构 • 独立的…

mockjs学习笔记

文章目录 一、什么是mockjs二、安装mockj项目安装mock 三、mock语法生成字符串生成文本生成标题和句子生成段落生成数字生成自增id生成姓名-地址-身份证随机生成图片生成时间 mock拦截请求定义get请求定义post请求 四、实现新闻管理案例获取数据添加新闻删除新闻 一、什么是moc…

有趣的地理题

题目 总部位于上海的“哔哩哔哩”&#xff08;简称B站&#xff09;&#xff0c;是国内知名的视频网站。在B站投稿的用户被称为“UP主”。据统计&#xff0c;B站的UP主群体中&#xff0c;来自上海的比例最高&#xff0c;200万粉丝以上的UP主&#xff0c;来自上海的比例超过 30 …

最佳Midjourney动漫相关风格提示词,值得收藏

先补充概念&#xff0c;后面慢慢补图片咯 动漫艺术家 下面是一些最伟大的艺术家的名单 Hayao Miyazaki, Co-founder of Studio Ghibli&#xff08;宫崎骏&#xff0c;吉卜力工作室的共同创始人&#xff09;Eiichiro Oda, One Piece&#xff08;织田荣一郎&#xff0c;《海贼…

【Linux】Linux下常见基本指令

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;Linux &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 前言 一、文件和目录操作指令 ls指令 pwd指令 cd指令 touch指令 rmdir指令 && rm 指令&#xff1a; man指…

吉布斯采样方法

吉布斯采样方法 对于多元分布, P ( X ) , X [ x 1 x 2 ] P(X), X\left[\begin{array}{l} x_1 \\ x_2 \end{array}\right] P(X),X[x1​x2​​]吉布斯抽样执行如下。假设很难从联合分布中抽样 P ( x 1 , x 2 ) P\left(x_1, x_2\right) P(x1​,x2​)但是从条件分布 P ( x 1 ∣ …

一键轻松拥有自己专属的 ChatGPT 网页版,搭建一个私人的可随时随地访问的ChatGPT网站

前言 ChatGPT是一种基于Transformer架构的自然语言处理模型&#xff0c;由OpenAI开发。GPT是“Generative Pre-trained Transformer”的缩写&#xff0c;意为“预训练生成式Transformer模型”。 ChatGPT模型是一种无监督学习模型&#xff0c;它可以在大规模文本数据上进行预训…

scratch比大小 中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析2023年3月

目录 scratch比大小 一、题目要求 1、准备工作 2、功能实现 二、案例分析

【react从入门到精通】深入理解React生命周期

文章目录 前言React技能树React的生命周期是什么React v16.0前的生命周期组件初始化(initialization)阶段组件挂载(Mounting)阶段组件更新(update)阶段组件销毁阶段 React v16.4 的生命周期总结写在最后 前言 在上一篇文章《react入门这一篇就够了》中我们已经掌握了React的基本…

软件STM32cubeIDE下STM32F1xx和STM32F4xx使用:备份寄存器+复位标志位-基础样例

软件STM32cubeIDE下STM32F1xx和STM32F4xx使用&#xff1a;备份寄存器复位标志位-基础样例 1、前言2 、 实验环境3、自我总结&#xff08;1&#xff09;对于备份寄存器&#xff08;BKP&#xff09;:&#xff08;2&#xff09;对于复位标志位&#xff08;RCC_CSR&#xff09;&…

【5G RRC】RSRP、RSRQ以及SINR含义、计算过程详细介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

一道经典的小学数学题,和它背后的贪心算法(35)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 欢迎和猫妹一起&#xff0c;趣味学Python。 今日主题 这个五一小长假&#xff0c;你玩得怎么样&#xff1f; 今天&#xff0c;咱们先做一道经典的小学数学题&#xff0c;…

Enabling Fast and Universal Audio Adversarial Attack Using Generative Model

Enabling Fast and Universal Audio Adversarial Attack Using Generative Model https://www.winlab.rutgers.edu/~yychen/ AAAI 2021 文章目录 Enabling Fast and Universal Audio Adversarial Attack Using Generative ModelAbstractIntroductionLimitations of Prior WorkT…

每日一个小技巧:1招教你怎么将照片无损放大

照片是一种记录、分享和保存记忆的重要方式。它可以记录特殊的时刻和经历&#xff0c;如毕业典礼、婚礼、旅游等&#xff0c;为我们锁住美好回忆。不知道大家有没有经历过&#xff0c;在手机或者电脑上打开一张拍摄的照片&#xff0c;却发现它的尺寸太小了&#xff0c;手动放大…

C语言从入门到精通

文章目录 C语言1.helloworld1.1 pause1.2 cls清屏1.3 加法运算1.4 hello 2 常量变量和数据类型2.1 常量2.2 变量2.3 sizeof数据类型大小2.4 无符号整型2.5 字符类型2.5.1 字符类型简介2.5.2 字符类型运算 2.6 实数型2.7 进制和转换2.8 数据溢出 3. 运算符和分支循环语句3.1 字符…

D. Decorate Apple Tree(记录每个点,叶子节点数目)

Problem - D - Codeforces 在Arkady的花园里有一棵苹果树。它可以表示为连接着枝干的节点集合&#xff0c;以便从任何一个节点到达任何其他节点时只有一种方法。节点从1到n进行编号&#xff0c;节点1称为根。 节点v的子树是指一组节点u&#xff0c;使得从u到根的路径必须经过v…