C++之栈容器

news2024/11/25 16:02:31

1.简介

  stack ,栈(堆栈),是一种先进后出(First In Last Out,FILO)的数据结构,先插入的数据在栈底,后放入的数据在栈顶,所有的数据只能从栈顶取出。
  在生活中先进后出的例子友很多,例如我们在桌子上摞书,先放的在最下面,后放的在最上面。在取书的时候也是先取最后放的,最才能取到第一个放的。
在这里插入图片描述
  栈容器中,只有栈顶数据才可以被外界访问,因此stack不存在遍历。

2.栈容器使用示例

  • stack(栈)容器特性
  • 先进后出(后进先出) --类似与往袋子中装东西,先放进去的在最下面,最后放进行的可以先拿出来;第一个放进去的 —>栈底最后一个放进的—>栈顶
  • stack只允许从栈顶取数据
  • stack容器无法对数据进行排序sort,但可以判断容器是否为空empty,可以计算元素的个数size;
  • 相关函数
  • stack构造函数:
      默认构造:stack< T > stk;
      拷贝构造:stack(const stack &p);

  • stack赋值
      运算符号重载:operator=()

  • stack入栈与出栈
      入栈(在容器尾部插入元素):emplace()
      入栈(在容器尾部插入元素): push()
      出栈:pop()
      查看栈顶元素:top()
      判断容器是否为空:empty()
      获取元素个数:size()
      交换元素:swap()

  • 使用示例
#include <iostream>
#include <stack>
using namespace std;
void test()
{
	//创建一个stack容器
	stack<int> stk;
	//入栈
	stk.push(10);
	stk.push(20);
	stk.push(30);
	stk.push(40);
	stk.emplace(100);
	stack<int>stk3(stk);//拷贝构造
	cout << "stk元素个数:" << stk.size() << endl;
	//查看stk元素
	while (!stk.empty())
	{
		cout << stk.top() << " ";//查看栈顶元素
		stk.pop();//出栈
	}
	cout << endl;
	stack<int>stk2 = stk;//赋值
	if (stk2.empty())
	{
		cout << "stk2为空" << endl;
	}
	//入栈
	stk2.push(111);
	stk2.push(222);
	stk2.swap(stk3);

	//查看stk2元素
	cout << "skt2栈内容:" << endl;
	while (!stk2.empty())
	{
		cout << stk2.top() << " ";//查看栈顶元素
		stk2.pop();//出栈
	}
	cout << endl;
	//查看stk3元素
	cout << "skt3栈内容:" << endl;
	while (!stk3.empty())
	{
		cout << stk3.top() << " ";//查看栈顶元素
		stk3.pop();//出栈
	}
	cout << endl;
}
int main()
{
	test();
	system("pause");
}

在这里插入图片描述

3.stack自定义类型示例

#include <iostream>
#include <stack>
using namespace std;
class Person
{
	friend ostream& operator<<(ostream& cout,Person p);//友元
public:
	//构造函数
	Person(int age,string name):age(age),name(name){
	}
	
private:
	int age;
	string name;
};
ostream& operator<<(ostream& cout,Person p)
{
	cout<<"姓名:"<<p.name<<"\t年龄:"<<p.age;
	return cout;
}

void test()
{
	stack<Person> st1;
	//入栈
	st1.emplace(18,"小王");
	st1.push(Person(20,"小刘"));
	st1.emplace(25,"阿水");
	cout<<"st1成员个数:"<<st1.size()<<endl;
	//出栈
	while(!st1.empty())
	{
		cout<<"取栈顶元素:"<<st1.top()<<endl;
		st1.pop();//出栈
	}
}
int main()
{
	test();
}

在这里插入图片描述

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

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

相关文章

给依赖打补丁的两种方案

以修改antd-table-infinity 插件为例&#xff0c;如图所示&#xff0c;要修改插件里代码 第一种方案&#xff1a;文件替换&#xff08;不推荐&#xff09; 1&#xff09; 将这个文件的代码都拷贝出来&#xff0c;并进行修改后存在项目里&#xff0c;我这边是放在了polyfill文…

java毕业设计基于springboot+vue的村委会管理系统

项目介绍 采用JAVA语言&#xff0c;结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。本村委会管理系统主要包括个人中心、村民管理、村委会管理、村民信息管理、土地变更管理、农业补贴管理、党员信息管理等多个模块。它帮助村委会管理实现了信息化、网络化&#xf…

TCP/IP--七层通信

文章目录 TCP/IP--七层通信先来看一下会话层以上的处理再来看一下传输层以下的处理 TCP/IP–七层通信 下面举例说明7层网络模型的功能。假设使用主机A的用户A要给使用主机B的用户B发送一封电子邮件。 在七层OSI模型中&#xff0c;如何模块化通信传输&#xff1f; 先来看一下七…

Spring Boot 面试题——自动装配

目录 Spring Boot 中的自动装配是指什么&#xff1f;解决了什么问题&#xff1f;Spring Boot 自动装配的流程有哪些&#xff1f;Spring Boot 中实现自动装配的原理是什么&#xff1f;Spring 中的 ConfigurationClassPostProcessor 类有什么作用&#xff1f;Spring Boot 自动装配…

关于微软文本转语音(语音合成)的一些坑

1. 单个音频时长限制10分钟 文档地址 2. 多人配音SSML 每次请求 <voice> 标签只能最大50个&#xff0c;参考 #1 3. SDK 在 linux 环境下 报错&#xff1a;gcc 软件无法加载 4. 语音品质问题 使用 SDK 生成的音频声音很差&#xff0c;默认音频流格式为 WAV&#xf…

Java——接口类和抽象类的方法声明不需要加{}

在Java中&#xff0c;接口类和抽象类的方法声明是不需要加{}的。具体来说&#xff1a; 1. 接口类&#xff08;Interface&#xff09;&#xff1a;接口类定义了一组方法的规范&#xff0c;没有具体的方法实现。在接口中&#xff0c;方法声明只包含方法名、参数列表和返回类型&a…

vue2.0 打包,nginx部署

1、修改这里为空 否则报错&#xff1a;vue is undefined 2、修改为hash&#xff0c;重点&#xff1a;打包dist文件运行&#xff0c;必须这样 3、安装ngnix&#xff0c;重点&#xff1a;使用node的包&#xff1a;httpserve&#xff0c;失败 4、重点&#xff1a;配置代理转发 前端…

au如何分离人声和背景音乐?帮你整理了几个必备的!

Audition专为在照相室、广播设备和后期制作设备方面工作的音频和视频专业人员设计&#xff0c;可提供先进的音频混合、编辑、控制和效果处理功能。因为软件的专业性&#xff0c;所以有些功能使用起来就比较复杂&#xff0c;下面介绍了详细的操作步骤。 方法一&#xff1a;直接使…

许战海战略文库|全球车型定位与中国车企的全球化机会

引言&#xff1a;从丰田阿尔法的身份转变到沃尔沃的市场双重身份,再到各大洲皮卡文化的多样表达,我们可以发现&#xff0c;同一车型在不同区域角色认知存在差异,不同区域主流化车型存在巨大差异。而背后是一系列关于文化差异、消费理念和生活方式的区别。中国新能源车企正面临一…

Spring Cloud之Sentinel的简单学习

目录 雪崩问题 超时处理 线程隔离 熔断降级 流量控制 服务对比 安装Sentinel控制台 案例 簇点链路 限流规则 流控模式 直接模式 关联模式 链路模式 流控效果 Warm up 排队等待 热点参数限流 隔离与降级 Feign整合Sentinel 线程隔离 规则设置 熔断降级 …

CSGO游戏里的饰品是如何被炒作起来的?

csgo倒狗们是如何操盘csgo饰品市场的&#xff1f; CSGO游戏里的饰品是如何被炒作起来的&#xff1f; 随着近几年csgo玩家数量急剧上升&#xff0c;倒狗在市场中的比例也在上升&#xff0c;之前的csgo饰品市场以散户居多&#xff0c;价格波动不大&#xff0c;现在倒狗大量涌入&a…

如何选择微信管理系统?

如何选择微信管理系统&#xff1f; 1、不用下载安装软件&#xff0c;不越狱不刷机 2、不绑定手机或电脑&#xff0c;不对电脑或手机做限制&#xff0c;也不受电脑、手机关闭、关机影响 3、能更新迭代&#xff0c;不限制版本 4、使用安全登录&#xff0c;保障账号安全的 5、不用…

Java方法与递归

目录 前言 1.什么是方法 2.语法的定义 3.方法调用的执行过程 4.实参和形参的关系 5.没有返回值的方法 5.方法的重载 为什么会有方法的重载&#xff1f; 方法重载概念 5.递归 递归的概念 递归执行过程分析 递归练习 前言 在我们日常在代码的过程中&#xff0c;会遇到…

大厂的 Git 代码管理规范是怎样的?

分支命名 master 分支 master 为主分支&#xff0c;也是用于部署生产环境的分支&#xff0c;需要确保 master 分支稳定性。master 分支一般由 release 以及 hotfix 分支合并&#xff0c;任何时间都不能直接修改代码。 develop 分支 develop 为开发环境分支&#xff0c;始终…

【Cortex-A7】 常用汇编指令

【Cortex-A7】 常用汇编指令 Cortex-A7 常用汇编指令1. 处理器内部数据传输2. 存储器访问指令3. 压栈和出栈指令4. 跳转指令5. 算术运算指令6. 逻辑运算指令 Cortex-A7 常用汇编指令 参考《ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf》的 A4 章节。 …

Android工具栏ToolBar

主流APP除了底部有一排标签栏外&#xff0c;通常顶部还有一排导航栏。在Android5.0之前&#xff0c;这个顶部导航栏以ActionBar控件的形式出现&#xff0c;但AcionBar存在不灵活、难以扩展等毛病&#xff0c;所以Android5.0之后推出了ToolBar工具栏控件&#xff0c;意在取代Aci…

ENVI波段合成

1、envi5.3合成&#xff08;这种方法&#xff0c;必须有地理参考才可以&#xff09; 在工具栏处搜索波段&#xff0c;找到波段合成&#xff08;Layer Stacking&#xff09; 设置合成波段&#xff0c;其他默认 2、envi classic&#xff08;没有地理坐标也可以&#xff09; 我们…

直击“挑战杯”竞赛:解锁顶级企业的“创新密码”

“企业只有一项真正的资源——人。” 管理学大师德鲁克&#xff0c;曾发表这样的观点。言外之意&#xff0c;人才是企业发展的根本动力&#xff0c;因为人才可以提供源源不断的创新力。能够基业长青、持续前行的企业&#xff0c;一定在人才上拥有独特优势。 如何吸引人才&#…

二叉树OJ题汇总

本专栏内容为&#xff1a;leetcode刷题专栏&#xff0c;记录了leetcode热门题目以及重难点题目的详细记录 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;Leetcode &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &…

基于B样条的FFD自由变换原理与C++实现

原理&#xff1a; https://blog.csdn.net/shandianfengfan/article/details/113706496 https://blog.csdn.net/qq_38517015/article/details/99724916 https://blog.csdn.net/qq_38517015/article/details/99724916 三次B样条 cubicBSplineFFD .h #pragma once #include &quo…