STL-stack容器和queue容器

news2024/11/28 2:38:02

stack概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口

栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为

与queue相似,stack也是一个适配器类,它给底层vector提供了典型的栈接口。stack比vector的限制多,不允许随机访问栈元素,不能够允许遍历栈,只是把使用限制在栈的基本操作。既可以将压入栈顶,从栈顶弹出元素、查看栈顶的数值、检查元素数目和测试是否为空。栈为先进先出。
 

 stack 常用接口:

构造函数:

stack<T > stk;                       //stack采用模板类实现, stack对象的默认构造形式
stack(const stack& stk);             //拷贝构造函数

赋值操作:

stack& operator=(const stack& stk);            //重载等号操作符

数据存取:

push(elem);            //向栈顶添加元素
pop();                 //从栈顶移除第一个元素
top();                 //返回栈顶元素

大小操作:

empty();             //判断堆栈是否为空
size();               //返回栈的大小

示例:

#include<iostream>
using namespace std;
#include <stack>

//栈容器常用接口
void test01()
{
	//创建栈容器 栈容器必须符合先进后出
	stack<int> s;

	//向栈中添加元素,叫做 压栈 入栈
	s.push(1);
	s.push(2);
	s.push(3);
	cout << "栈的大小为:" << s.size() << endl;
	while (!s.empty())//如果stack中还有元素,那么就继续输出栈顶元素 
	{
		//输出栈顶元素
		cout << "栈顶元素为: " << s.top() << endl;
		//弹出栈顶元素
		s.pop();
	}
	cout << "栈的大小为:" << s.size() << endl;

}

int main() {

	test01();

	system("pause");

	return 0;
}

运行结果:

queue概念:queue 容器适配器有 2 个开口,其中一个开口专门用来输入数据,另一个专门用来输出数据

queue类是一个适配器类。queue模板让底层类(默认为deque)展示为典型的队列接口。queue的限制比deque更多。不仅不支持随机访问,甚至不允许遍历队列。他只能将元素添加到队尾、从队首删除元素、查看队尾和队首的数值、检查元素数目和测试队列是否为空。(这就是阉割版的deque,但是用在纯队列中效率更高)
 

queue常用接口:

 构造函数:

queue<T > que;                        //queue采用模板类实现,queue对象的默认构造形式
queue(const queue & que);             //拷贝构造函数

赋值操作:

queue& operator=(const queue & que);            //重载等号操作符

数据存取:

push(elem);                              //往队尾添加元素
pop();                                   //从队头移除第一个元素
back();                                  //返回最后一个元素
front();                                 //返回第一个元素

大小操作:

empty();             //判断堆栈是否为空
size();               //返回栈的大小

示例:

#include<iostream>
using namespace std;
#include<queue>
#include<string>
class Person
{
public:
	Person(string name, int age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}

	string m_Name;
	int m_Age;
};

void test01() {

	//创建队列
	queue<Person> q;

	//准备数据
	Person p1("唐僧", 30);
	Person p2("孙悟空", 1000);
	Person p3("猪八戒", 900);
	Person p4("沙僧", 800);

	//向队列中添加元素  入队操作
	q.push(p1);
	q.push(p2);
	q.push(p3);
	q.push(p4);

	//队列不提供迭代器,更不支持随机访问	
	while (!q.empty()) {
		//输出队头元素
		cout << "队头元素-- 姓名: " << q.front().m_Name
			<< " 年龄: " << q.front().m_Age << endl;

		cout << "队尾元素-- 姓名: " << q.back().m_Name
			<< " 年龄: " << q.back().m_Age << endl;

		cout << endl;
		//弹出队头元素
		q.pop();
	}

	cout << "队列大小为:" << q.size() << endl;
}

int main() {

	test01();

	system("pause");

	return 0;
}

运行结果:

stack和queue的使用场景

借助栈的先进后出的特性,可以简单实现一个逆序输出的功能,首先把所有元素依次入栈,然后把所有元素出栈并输出

包括编译器的在对输入的语法进行分析的时候,例如"()"、"{}"、"[]"这些成对出现的符号,借助栈的特性,凡是遇到括号的前半部分,即把这个元素入栈,凡是遇到括号的后半部分就比对栈顶元素是否该元素相匹配,如果匹配,则前半部分出栈,否则就是匹配出错

包括函数调用和递归的时候,每调用一个函数,底层都会进行入栈操作,出栈则返回函数的返回值

生活中的例子,可以把乒乓球盒比喻成一个堆栈,球一个一个放进去(入栈),最先放进去的要等其后面的全部拿出来后才能出来(出栈),这种就是典型的先进后出模型

队列

当我们需要按照一定的顺序来处理数据,而该数据的数据量在不断地变化的时候,则需要队列来帮助解题

队列的使用广泛应用在广度优先搜索中,例如层次遍历一个二叉树的节点值

生活中的例子,排队买票,排在队头的永远先处理,后面的必须等到前面的全部处理完毕再进行处理,这也是典型的先进先出模型

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

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

相关文章

C语言——数组

哈喽&#xff0c;大家好&#xff0c;今天我们要学习的是数组的相关知识。 目录 1.什么是数组 2.一维数组 2.1一维数组的创建和初始化 2.2一维数组的使用 2.3一位数组在内存中的存储 3.二维数组 3.1二维数组的创建和初始化 4.2二维数组的使用 4.3二位数组在内存中的存储…

java安全编码规范(0)

JAVA安全编码标准 有这么一指导书&#xff0c;新手可以去看看&#xff0c;这里主要从实践总结&#xff0c;随时会更新。 主要从十个方面去了解下&#xff0c;实际上远远不只这些哦。 ​​​​​​​ 1、引用java security library 环境需求 Java 8Maven 3 a、编译jar包&a…

「锂」清思绪,触达未来 | 锂电池企业如何实现数字化破局?

锂电池制造的困局与破局 锂电池行业产业链的上游主要为正负极材料、电解液、电极基材、隔膜等领域的供应商&#xff1b;中游为电芯制造及封装行业&#xff1b;下游则主要是动力电池、消费电子等锂电池的应用领域。 图1&#xff1a;锂电池行业产业链 近年来&#xff0c;随着相…

虹科方案 | 适用于高压环境或潜在爆炸性环境的加速度计系统

PART 1 加速度系统 加速度计系统通常用于测量振动或运动。测量系统能够记录一个、两个或三个空间方向的运动。所实际使用的传感器是光纤传感器&#xff0c;可提供不受电磁干扰影响的可靠测量值。当然&#xff0c;这样的系统具有高可靠性&#xff0c;即使在不断变化的天气条件下…

转置卷积(Transposed Convolution)可视化过程

目录 1. 介绍2. 标准卷积3. 转置卷积4. 总结 1. 介绍 转置卷积&#xff08;Transposed Convolution&#xff09;经常也被称作反卷积&#xff0c;所谓反卷积即为通过标准卷积层生成的输出被反卷积&#xff0c;将得到原始输入。而转置卷积不按值反转标准卷积&#xff0c;而仅按维…

STM32F4_待机唤醒详解

目录 1. 低功耗模式 1.1 降低系统时钟速度 1.2 外设时钟门控 2. 睡眠模式 2.1 进入睡眠模式 2.2 退出休眠模式 3. 停止模式 3.1 进入停止模式 3.2 退出停止模式 4. 待机模式 4.1 进入待机模式 4.2 退出待机模式 4.3 电源控制寄存器&#xff1a;PWR_CR 4.4 电源控…

‘OpenpyxlWriter‘ object has no attribute ‘save‘

使用read_sql(sql,conn)来获取数据库查询的结果&#xff0c; 在将处理完成的表格保存下来时&#xff0c;可能会显示如下错误&#xff1a; 将writer.save()改成writer._save()就可以解决这个问题了。

必须了解的mysql三大日志-binlog、redo log和undo log

目录 一&#xff0c;前言二&#xff0c;binlog-备份日志1&#xff0c;作用2&#xff0c;使用场景3&#xff0c;日志形式4&#xff0c;binlog刷盘时机 三&#xff0c;redo log-重做日志1&#xff0c;概念2&#xff0c;为什么需要redo log3&#xff0c;日志形式4&#xff0c;redo…

数据结构之树(一)

一.概念 边:一棵n个结点树有n-1条边 结点深度&#xff1a;从根到当前结点的路径的深度。 结点高度&#xff1a;从当前结点到叶子结点最长路径的长度。 树的性质 树中的结点总数等于所有结点的度1&#xff1b;m叉树中第i(i>1)层上至多可以有m^(i-1)个节点&#xff1b; 高…

互联网大厂手把手教你搭建数据服务中台(附下载链接)

摘要: 随着公司业务的发展&#xff0c;对于数据的需求会越来越多。怎么在业务系统中高效的使用数据&#xff0c;让业务系统处理大数据时化繁为简&#xff0c;数据服务化基本是必经之路。那么什么是数据服务化&#xff0c;简单理解就是数据SaaS&#xff0c;通过一些数据库语言把…

true or false?

有同学在星球问了这样一个问题。 代码是这样的&#xff1a; public class Main {private static final Main instance new Main();private boolean b a;private static boolean a initA();private static boolean c a;private static boolean initA() {return true;}priva…

洛谷B2099 矩阵交换行

矩阵交换行 题目描述 给定一个 5 5 5 \times 5 55 的矩阵(数学上&#xff0c;一个 r c r \times c rc 的矩阵是一个由 r r r 行 c c c 列元素排列成的矩形阵列)&#xff0c;将第 n n n 行和第 m m m 行交换&#xff0c;输出交换后的结果。 输入格式 输入共 6 6 6 …

DataEase 本地源码启动详细教程

本教程将引导你通过本地源码部署的方式启动 DataEase&#xff0c;同时我还录制了相应的视频教程&#xff0c;你可以跟随视频进行操作&#xff1a; DataEase 本地源码启动_哔哩哔哩_bilibili 1、下载并安装IDEA开发工具 2、下载安装Mysql 5.7 以及 JDK 1.8 如果你使用的是wi…

使用pdf.js展示pdf文件(亲测可用)

简单的实现方式 如果只是电脑端&#xff0c;可通过 iframe 标签嵌套预览 ios手机端可通过 a 标签包裹点击跳转预览&#xff08;安卓端不行&#xff09; 安卓电脑ios的通用方法 资料 老版本github地址 全版本地址 获取当前客户端类型 judgeClient() {let client if (/(iPh…

鲁大师智能化评测新项目——鲁大师真续航测试1.0正式发布

随着社会的高速发展&#xff0c;人们出行的交通工具正变得多种多样&#xff0c;有电单车、摩托车、自行车、两轮平衡车、甚至滑板等。不过如我们所见&#xff0c;电动两轮车已经成为了大多数近途出行用户的选择&#xff0c;因电单车具有方便、快捷、灵活、小巧、易停放等优点而…

MySQL基础篇4

MySQL基础 1. 数据类型1.1 整数类型1.2 浮点类型1.3 定点数类型1.4 位类型1.5 日期时间类型1.6 文本字符串类型1.6.1 CHAR类型和VARCHAR类型1.6.2 TEXT类型 1.7 ENUM枚举类型1.8 SET类型1.9 二进制字符串类型1.10 JSON数据类型 2. 约束2.1 前置知识2.1.1 为什么需要约束2.1.2 约…

亚马逊云科技围绕需求发力,赋能医疗与生命科学行业数字化创新

2023年4月27日&#xff0c;亚马逊云科技医疗与生命科学行业峰会召开&#xff0c;会议汇聚了业界专家和思想领袖&#xff0c;共同探讨行业数字化转型和创新之道。作为全球医疗及生命科学行业云计算引领者&#xff0c;亚马逊云科技将围绕数据、算力和行业用户体验三大需求发力&am…

移远“5G+Wi-Fi 6”方案双重加速,为用户带来更具性价比的连网体验

近年来&#xff0c;人们对于高速宽带连接的需求猛增&#xff0c;这对网络传输速率、稳定性与时延都提出了更高的要求。在离开网络寸步难行的今天&#xff0c;插电即用、免拉宽带的5G CPE受到了广泛关注。 在地广人稀的部分海外市场&#xff0c;受制于光纤铺设成本、周期、路由规…

Day966.从组件团队到Spotify模型 -遗留系统现代化实战

从组件团队到Spotify模型 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于从组件团队到Spotify模型的内容。 团队结构现代化。这个方向跟管理有关&#xff0c;但无论掌控全局的 CTO、架构师&#xff0c;还是身处遗留系统一线战队的队员&#xff0c;都有必要了解现代…

JavaScript - 基础+WebAPI(笔记)

前言&#xff1a; 求关注&#x1f62d; 本篇文章主要记录以下几部分&#xff1a; 基础&#xff1a; 输入输出语法&#xff1b;数据类型&#xff1b;运算符&#xff1b;流程控制 - 分支语句&#xff1b;流程控制 - 循环语句&#xff1b;数组 - 基础&#xff1b;函数 - 基础&…