详解c++---stack和dequeue的介绍

news2024/9/24 19:19:18

目录标题

  • stack介绍
  • stack的定义
  • stack的数据插入
  • stack中数据的个数
  • stack数据删除
  • stack中数据的查看
  • 判断stack对象是否为空
  • stack对象的数据交换
  • queue的介绍
  • queue的定义
  • queue的数据插入
  • front
  • back
  • queue的元素个数
  • queue中元素的删除
  • empty
  • queue的数据交换

stack介绍

首先stack是一个类这个类是专门用来存数据,并且这个类是一个模板类,所以我们可以使用这个stack来存储各种各样的数据,但是这个类在存储数据的时候得遵循LIFO规则也就是后进先出原则:后进入stack的数据会先出stack,我们把最后进入stack对象的数据称为栈顶元素,把最先进入stack对象的数据称为栈底元素,下面是这个类的英文介绍:
在这里插入图片描述

stack的定义

我们来看看stack的构造函数:
在这里插入图片描述
库中的stack函数只提供了一种形式,并且这种形式的参数只有一个还提供了缺省值,那么我们在使用这个类的时候就不要管这个参数直接使用缺省值即可,比如下面的代码:

#include<iostream>
#include<stack>
using namespace std;
int main()
{
	stack<int> s1;
	return 0;
}

这样我们就创建了一个空类。

stack的数据插入

在stack中插入数据只能用到push函数:
在这里插入图片描述
这个函数有一个参数,并且该参数是value_type类型,那么这个类型的意思是:模板中第一个参数的类型
在这里插入图片描述
也就是stack在显示初始化的时候我们给的那个类型,那么该函数的使用代码如下:

#include<iostream>
#include<stack>
using namespace std;
int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	return 0;
}

我们可以通过调试看到这里的s1中确实有数据1 2 3 4 :
在这里插入图片描述

stack中数据的个数

这个函数就是显示stack对象中含有数据的个数
在这里插入图片描述
比如下面的代码:

int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	size_t _size = s1.size();
	cout << "对象中还有的个数为:" << _size << endl;
	return 0;
}

这段代码的运行结果为:
在这里插入图片描述

stack数据删除

在stack当中不存在头删尾删和任意位置的删除,只有一个pop函数来删除数据最后进入stack对象的数据,也就是栈顶元素:
在这里插入图片描述

比如说下面的代码:

int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	size_t _size = s1.size();
	cout << "对象中还有的个数为:" << _size << endl;
	s1.pop();
	return 0;
}

我们通过调试可以看到在pop函数执行之前对象s1中的内容为:
在这里插入图片描述
当我们执行完这里的pop函数之后,由于元素4是最后一个进入stack对象的,所以它是栈顶元素,那么在执行完pop函数之后该元素就会被删除,我们来看看调试的结果:
在这里插入图片描述
那么这就是pop函数的作用。

stack中数据的查看

在stack当中没有迭代器,范围for和操作符[ ]重载这些功能,因为stack遵守后进先出的LIFO规则,所以我们这里只能通过top函数来查看stack对象中的栈顶元素的内容,
在这里插入图片描述

当我们想看栈顶的后一个元素的时候,就只能将栈顶的元素删除再调用top函数来进行查看,比如说下面的代码:

int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	size_t _size = s1.size();
	cout << "对象中还有的个数为:" << _size << endl;
	cout << "对象中栈顶的元素为:" << s1.top() << endl;
	s1.pop();
	_size = s1.size();
	cout << "对象中还有的个数为:" << _size << endl;
	cout << "现在栈顶的元素为:" << s1.top() << endl;
	return 0;
}

这段代码的运行结果如下:
在这里插入图片描述
并且我们还可以通过top函数来修改栈顶元素的内容,比如说下面的代码:

int main()
{
	stack<int>s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	cout << "修改前栈顶的元素为:" << s1.top() << endl;
	s1.top() = 10;
	cout << "修改后栈顶的元素为:" << s1.top() << endl;
}

这段代码的运行结果如下:
在这里插入图片描述

判断stack对象是否为空

当我们想看看stack对象是否为空的时候就可以用到empty函数,这个函数的功能就是检查对象的数据是否为空,如果为空的话这个函数就会返回true,如果不为空的话这个函数就会返回flase,该函数的介绍如下:
在这里插入图片描述
这里就不用演示了。

stack对象的数据交换

stack也提供了,swap函数其作用就是将两个stack对象的数据进行交换,该函数的介绍如下:
在这里插入图片描述
我们可以看看下面的代码:

int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	stack<int> s2;
	s2.push(5);
	s2.push(6);
	s2.push(7);
	s2.push(8);
	s1.swap(s2);
	return 0;
}

在执行swap函数之前两个对象的内容如下:
在这里插入图片描述
执行完swap函数之后两个对象的内容为:
在这里插入图片描述
那么以上就是stack库中的所有基本内容。

queue的介绍

在这里插入图片描述

  1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。
  2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。
  3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。
  4. 标准容器类deque和list满足了这些要求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque。

在这里插入图片描述

queue的定义

在这里插入图片描述
这个对象的构造函数也只有一个参数,并且这个参数也是提供了缺省参数,我们使用的时候可以不用管,我们使用的时候直接创建一个空队列就行:

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	queue<int> q1;
	return 0;
}

queue的数据插入

在这里插入图片描述
通过这个函数,我们可以往指定队列对象中插入数据,那么这里的参数类型得和队列的数据相同,我们可以看卡下面的代码:

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	return 0;
}

我们创建队列的时候显示初始化为int类型,那么我们使用push函数的时候也得传递int类型的数据,那么我们这里就可以通过调试来看到这个对象的中内容:
在这里插入图片描述

front

在这里插入图片描述
这个函数的作用就是返回队列头部的值,并且我们可以通过这个函数来修改队列头部的值,比如说下面的代码:

using namespace std;
int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout <<"front 指向的元素为:" << q1.front() << endl;
	q1.front() = 10;
	cout << "front 指向的元素为:" << q1.front() << endl;
	return 0;
}

这段代码的运行结果如下:
在这里插入图片描述

back

在这里插入图片描述
这个函数的作用与front函数相反,这个函数就是返回队列尾部的值并且同样可以对其进行修改,比如说下面的代码:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout << "back 指向的元素为:" << q1.back() << endl;
	q1.back() = 10;
	cout << "back 指向的元素为:" << q1.back() << endl;
	return 0;
}

在这里插入图片描述

queue的元素个数

在这里插入图片描述
size函数的作用就是返回队列中元素的个数,比如说下面的代码:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout << "q1的元素个数为:" << q1.size() << endl;
	q1.push(5);
	cout << "q1的元素个数为:" << q1.size() << endl;
	return 0;
}

这段代码的运行结果如下:
在这里插入图片描述

queue中元素的删除

在这里插入图片描述
在队列中删除元素得用到pop函数,这个函数可以将队列中队头的数据进行删除,比如说下面的代码:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout << "q1的元素个数为:" << q1.size() << endl;
	q1.pop();
	cout << "q1的元素个数为:" << q1.size() << endl;
	return 0;
}

这段代码的运行结果如下:

在这里插入图片描述

empty

在这里插入图片描述
当我们想看看queue对象是否为空的时候就可以用到empty函数,这个函数的功能就是检查对象的内容是否为空,如果为空的话这个函数就会返回true,如果不为空的话这个函数就会返回flase。

queue的数据交换

在这里插入图片描述
如果我们想将两个queue对象的数据进行交换的话,我们这里就可以使用swap函数,这里为了防止使用者用错了方法,库中还提供了另外一种使用的形式:
在这里插入图片描述
我们来看看下面的代码:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	queue<int> q2;
	q2.push(5);
	q2.push(6);
	q2.push(7);
	q2.push(8);
	q1.swap(q2);
	swap(q1, q2);
	return 0;
}

我们可以通过调试来看到在swap函数执行之前两个对象的内容为:
在这里插入图片描述
执行了第一个swap函数之后,两个对象的内容进行了交换:
在这里插入图片描述
当我们再执行另一种swap函数之后对象的数据如下:
在这里插入图片描述
那么这就是swap函数的作用。

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

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

相关文章

windows kafka mq 安装和使用介绍 及踩坑记录 及集群架构kafka实现架构 各自运行机制 一次性看明白

目录 介绍 安装集群 简单介绍按照步骤 zookeeper 安装 kafka安装 基础配置3个节点 在配置三个启动bat 重点 常见问题 内存不够配置文件中增加如下 java.io.IOException: Map failed 基础使用 创建主题 查看创建 生产者 消费者 应用场景 kafka一些原理和特点 …

让自动化测试秒杀繁琐操作?试试PO模式设计框架

目录&#xff1a;导读 引言 po模式 优势&#xff1a; 目录解释&#xff1a; 页面对象设计模式&#xff1a; base基础层&#xff1a; page对象层&#xff1a; test:测试层 data数据层&#xff1a; common层&#xff1a; untils: config层&#xff1a; run层&#xff1a;…

救生衣、划船背心、救生圈、U 形救生圈和投掷式浮垫等个人漂浮设备 (PFD)UL报告标准要求

个人漂浮设备 (PFD) 个人漂浮设备 (PFD) 是帮助人们在水中保持漂浮状态的装备。个人漂浮设备是一个范围较大的商品分类&#xff0c;其中包括救生衣、划船背心、救生圈、U 形救生圈和投掷式浮垫 救生衣 救生衣是一种在使用者正确穿戴时可为其提供支持的服装或设备&#xff0c;由…

Redis【性能 01】Redis 5.x 6.x 7.x 共5个不同版本延迟及性能测试对比分析(单机版默认配置)

延迟及性能测试比对分析过程 1.环境说明2.测试结果Version 5.0.3【待优化版本】Version 5.0.7【云服务器使用的版本】Version 5.0.14【5.x最终版】Version 6.2.12【6.x最终版】Version 7.2-rc1【当前最新的发布候选版】 3.汇总分析3.1 延迟测试结果汇总3.1 性能测试结果汇总 4.…

今天 国际青年节 “International Youth Day “

《劝学》孟郊 击石乃有火&#xff0c;不击元无烟。 人学始知道&#xff0c;不学非自然。 万事须己运&#xff0c;他得非我贤。 青春须早为&#xff0c;岂能长少年。 Strike stones to make it burn; No smoke unless you strike. Youre crude if you dont learn; And you…

Syncthing文件同步 - 免费搭建开源的文件自动同步服务器并公网远程访问【私人云盘】

文章目录 1. 前言2. Syncthing网站搭建2.1 Syncthing下载和安装2.2 Syncthing网页测试2.3 注册安装cpolar内网穿透 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 在数据爆炸的当下&#xff0c;每天都会产生海量的数据&#xff0c;这些…

SQL注入攻防入门详解

毕业开始从事winform到今年转到 web &#xff0c;在码农届已经足足混了快接近3年了&#xff0c;但是对安全方面的知识依旧薄弱&#xff0c;事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入的相关知识整理了下&#xff0c;希望大家多多提意见。 &#xff08;对于…

ACIS的拓扑基础数据结构

在ACIS中,拓扑基础数据结构按照从低维到高维的顺序包括: Vertex(顶点):表示空间中的一个点,用于定义点的位置和属性。Edge(边):由两个顶点连接而成,具有方向属性,用于定义直线段和圆弧。Coedge(共面边):表示面的边缘,也就是一条边可以被多个面共享。Coedge有两个…

SpringCloud学习(七)——统一网关Gateway

文章目录 1. 网关介绍2. 网关搭建2.1 引入依赖2.2 创建启动类2.3 编写配置2.4 测试 3. 路由断言工厂4. 路由过滤器4.1 过滤器配置4.2 全局过滤器4.3 过滤器执行顺序 5. 跨域问题处理 1. 网关介绍 到现在&#xff0c;我们可以使用Nacos对不同的微服务进行注册并管理配置文件&am…

淘宝天猫公布618整体活动节奏

5月4日消息&#xff0c;淘宝直播618选品会近日在杭州成功举办&#xff0c;淘宝直播商品中心团队和天猫、全球购行业小二在会上与商家、达人主播等参会人士探讨如何选品才能打动消费者、如何保障货品的质量安全、如何完善商品的售后服务等问题&#xff0c;共同分析直播电商行业中…

verilog驱动LCD显示彩条、字符

verilog驱动LCD显示彩条、字符 一、简介 LCD&#xff08;liquid crystal display&#xff09;:液晶显示器 TFT&#xff1a;薄膜晶体管 LCD屏幕接口&#xff1a;常见的LCD屏幕接口有&#xff1a;RGB、MCU、LVDS、MIPI等 RGB LCD接口原理图&#xff1a;其中MISO、MOSI是IIC接…

Acjudge #P1004. 整除三元组

蒟蒻来讲题&#xff0c;还望大家喜。若哪有问题&#xff0c;大家尽可提&#xff01; Hello, 大家好哇&#xff01;本初中生蒟蒻讲解一下Acjudge #P1004. 整除三元组! 原题 题目背景 潍坊高新OI社区打算开讲“数论”了&#xff0c;大家赶紧来学习一下“整除”吧。 题目描述 …

第一章 数字图像本质及基础操作

系列文章目录 第一章 图像本质及基础操作 文章目录 系列文章目录前言一、数字图像的本质二、图像基础理论1.色彩空间1.1 RGB模型1.2 HSV模型1.3 HSL模型1.4 YUV模型1.5 灰度图1.6 OpenCV中色彩空间转换 2.图片的存储3.图像参数 三、图像的基础操作及OpenCV画图1.图像的基础操作…

Hololens2开发指南

练习 - 导入和配置资源 - Training | Microsoft Learn unity需要高版本 用2019.4.30支持平台这没有openxr 用2020.3.36可以&#xff0c;2021版本也可以出现

代码随想录算法训练营第三十天 | 航班问题、二维回溯

回溯法小结 本周小结&#xff01;&#xff08;回溯算法系列三&#xff09; | 代码随想录 (programmercarl.com) 性能分析 子集问题分析&#xff1a; 时间复杂度&#xff1a;O(n 2n)&#xff0c;因为每一个元素的状态无外乎取与不取&#xff0c;所以时间复杂度为O(2n)&…

蚁群算法-车辆配载率的路径优化

车辆配送路径优化问题可描述为&#xff1a;某商超配送中心要使用一定数量的车辆对一批货物进行配送服务&#xff0c;要求在不超过车辆的额定载重量和额定容积的条件下&#xff0c;安排这些货物的装载&#xff0c;使得车辆利用率最高。 针对以上问题做出假设&#xff1a; (1) 只…

Python学习笔记(1)

《Python编程&#xff1a;从入门到实践》学习笔记 python编程软件PyCharm Community Edition 2022.3.2&#xff0c;快捷键&#xff1a;Ctrl/ 表示注释Python代码。 一、变量的命名和使用 1.变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头&#xff0c;但不能以数…

Java开发初学者实用网站

1.慕课网&#xff08;http://www.imooc.com&#xff09;&#xff1a;提供了大量的Java在线教程和视频。 优点 1.广泛的开放性&#xff1a;大规模、开放性和受众广 2.透明性&#xff1a;根据不同兴趣、准备情况和时间来学习所需课程 3.优质资源易获取性&#xff1a;让每位学生…

Python每日一练(20230504)

目录 1. 课程表 Course Schedule I 2. 课程表 Course Schedule II &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 课程表 Course Schedule I 你这个学期必须选修 numCourses 门课程&a…

linux ll命令是什么

ll并不是linux下一个基本的命令&#xff0c;它实际上是ls -l的一个别名。 # 查看指定目录下的内容&#xff0c;默认查看当前目录下内容 ls [-ald] [目录名] # 目录名不填写&#xff0c;默认为当前目录。 # -a&#xff1a;列出的全部的文件&#xff0c;包括隐藏文件 # -l&#x…