Day11 C++STL入门基础知识八——stack、queue容器 基本概念-常用接口 【全面深度剖析+例题代码展示】

news2024/10/6 2:28:49

💃🏼 本人简介:男
👶🏼 年龄:18
🚩 今日留言:亮亮被迫去练科目二啦,定时发布的文章,回来统一给大家三连回复嗷~😉
在这里插入图片描述

文章目录

  • 1. stack容器——栈
    • 1.1 基本概念
      • 1.1.1 特点
        • ① 先进后出
        • ② 不能遍历
        • ③ 可以为空,返回元素个数
      • 1.1.2 图解
    • 1.2 函数原型
      • a. 构造函数
      • b. 赋值操作
      • c. 数据存取
      • d. 大小操作
    • 1.3 代码展示
    • 1.4 测试结果
  • 2. queue容器——队列
  • 2.1 基本概念
      • 2.1.1 特点
        • ① 先进先出
      • ② 不能遍历
      • ③ 可以为空,返回元素个数
      • 2.1.2 图解
    • 2.2 函数原型
      • a. 构造函数
      • b. 赋值操作
      • c. 数据存取
      • d. 大小操作
    • 2.3 代码展示
    • 2.4 测试结果
  • 3. 感谢大家支持u ^ _ ^

1. stack容器——栈

大家不妨想一下生活中,当我们往行李箱里放衣服时,是不是先放进去的衣服被压在最下面,最后才能取出来呢,而最后放进去的衣服最先拿出来呢。如果大家这都能理解的话,那恭喜大家,已经领悟到栈的精髓了哈!!具体特点我们接下来开始讲叭~

1.1 基本概念

1.1.1 特点

① 先进后出

  • stack是一种先进后出的数据结构,它只有一个出口

② 不能遍历

  • 栈容器由于只有顶部元素才能被访问,要想访问栈中其他元素,则需要先把底部元素拿走,但一旦把底部元素拿走,栈的元素就变少了,使容器元素发生改变,而遍历操作不能改变容器中的元素,所以栈不能进行遍历操作

③ 可以为空,返回元素个数

  • 栈容器可以为空【通过empty函数()接口】
  • 可以通过入栈时来记录元素的个数【通过size()函数接口】

1.1.2 图解

在这里插入图片描述
在这里插入图片描述

1.2 函数原型

记得头文件#include<stack>

a. 构造函数

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

b. 赋值操作

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

c. 数据存取

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

d. 大小操作

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

1.3 代码展示

#include<stack>
#include<stdio.h>
#include<iostream>
using namespace std;

void text01() {
	//特点:符合先进后出的数据结构
	stack<int> s;
	s.push(10);
	s.push(20);
	s.push(30);
	s.push(40);

	cout << "栈的大小: " << s.size() << endl;

	//只要栈不为空,查看栈顶,并执行出栈操作
	while (!s.empty()) {
		
		//查看栈顶元素
		cout << "栈顶元素为: " << s.top() << endl;
		
		//出栈
		s.pop();
		
		cout << "栈的大小: " << s.size() << endl;
	}
	
}
int main() {
	text01();

	return 0;
}

1.4 测试结果

在这里插入图片描述

2. queue容器——队列

在已逝的2019-2022的三年,相信大家每天都有对核酸支配的经历。我们不妨回忆一下,我们排队做核酸时,先排队的A是不是最先做完可以走呢。而最后排队的B是不是最后一个做完,最后才能走呐??没错,这就是队列的精髓——先进先出!!!接下来关于队列的故事,我们慢慢讲!

2.1 基本概念

2.1.1 特点

① 先进先出

  • 具有两个出口,先进先出
  • 队尾入队,队头出队
  • 队列容器允许从一端新增元素,从另一端移除元素

② 不能遍历

  • 【原因类似于stack的栈】queue队列容器由于只有队头和队尾元素才能被访问,要想访问队中其他元素,则需要先把队头/队尾元素拿走,但一旦把头/尾元素拿走,队列中的元素就变少了,使容器元素发生改变,而遍历操作不能改变容器中的元素,所以队列不能进行遍历操作

③ 可以为空,返回元素个数

  • 队列容器可以为空【通过empty函数()接口】
  • 可以返回队列的个数【通过size()函数接口】

2.1.2 图解

在这里插入图片描述
在这里插入图片描述

2.2 函数原型

记得头文件#include<squeue>

a. 构造函数

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

b. 赋值操作

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

c. 数据存取

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

d. 大小操作

  • empty(); 判断队列是否为空
  • size(); 返回队列的大小

2.3 代码展示

#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;

class Player {
public:
	Player(string name, int age) {
		this->m_name = name;
		this->m_age = age;
	}
public:
	string m_name;
	int m_age;
};
//队列queue
void text01() {
	//创建队列
	queue<Player> q;

	//准备数据
	Player p1("James", 38);
	Player p2("Irving", 30);
	Player p3("Durant", 34);
	Player p4("Rose", 34);
	Player p5("Curry", 34);

	//入队
	q.push(p1);
	q.push(p2);
	q.push(p3);
	q.push(p4);
	q.push(p5);

	cout << "出队前队列大小为: " << q.size() << endl;
	cout << "------------------------------------------" << endl;
	while ( !q.empty() ) {
		//只要队列不为空,查看队头和队尾
		cout << "队头为: ";
		cout << "姓名: " << q.front().m_name << " 年龄为: " << q.front().m_age << endl;
		cout << "队尾为: ";
		cout << "姓名: " << q.back().m_name << " 年龄为: " << q.back().m_age << endl;
		cout << "------------------------------------------" << endl;
		//出队
		q.pop();
	}
	cout << "出队后大小为: " << q.size() << endl;
}

int main() {
	text01();

	return 0;
}

2.4 测试结果

在这里插入图片描述

3. 感谢大家支持u ^ _ ^

下一期预告:list容器

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

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

相关文章

CSDN常见问题汇总

1.怎么申请退款&#xff1f; 通过CSDN平台购买的“VIP会员、余额”&#xff0c;在刚购买后未使用的情况可支持退款&#xff1b; “付费资源、付费专栏、盲盒、魔盒、课程、C认证”等虚拟商品一经购买后&#xff0c;除了特殊原因外&#xff0c;概不支持退款&#xff1b; 特殊原…

美团8年测试经验,一文手把手教你抒写接口测试框架集成测试报告

在接口自动化测试完成后&#xff0c;通常我们都需要一个测试报告来进行结果展示&#xff0c;而测试报告的美观程度直接决定了你在同事和领导眼中的技术形象&#xff0c;本文将介绍rest-assured接口测试框架集成ExtentReports测试报告&#xff0c;让你的框架更加完美。 ExtentR…

【大唐杯备考】——5G网元功能与接口(学习笔记)

&#x1f4d6; 前言&#xff1a;本期介绍5G网元功能与接口。 目录&#x1f552; 1. 5G移动通信系统整体网络架构&#x1f558; 1.1 5G核心网架构&#x1f558; 1.2 5G接入网架构&#x1f552; 2. 5G主要网元功能&#x1f558; 2.1 UPF&#xff08;用户面功能&#xff09;&#…

使用code-server为Docker容器搭建在线开发环境

Code-server是一个基于服务端的开源VSCode。只要服务器端配置好code-server&#xff0c;就可以在任何浏览器上使用VScode访问服务器的代码进行编程。&#xff08;GitHub地址&#xff1a;https://github.com/cdr/code-server&#xff09; Docker是一个开源的Linux容器引擎。我们…

DeepLabV3+:搭建Mobilenetv2网络

目录 Mobilenetv2的介绍 Mobilenetv2的结构 Inverted Residual Block倒残差结构 Pytorch实现Inverted Residual Block 搭建Mobilenetv2 Pytorch实现Mobilenetv2主干网络 相关参考资料 Mobilenetv2的介绍 Mobilenetv2网络设计基于Mobilenetv1&#xff0c;它保持了其简单…

【进击的算法】动态规划——01背包

&#x1f37f;本文主题&#xff1a;动态规划 01背包 背包问题 C/C 算法 &#x1f388;更多算法&#xff1a;基础回溯算法 基础动态规划 &#x1f495;我的主页&#xff1a;蓝色学者的主页 文章目录一、前言二、概念✔️动态规划概念✔️01背包的概念三、问题描述与讲解&#x1…

spring 中 mybaits 的一级缓存失效

mybatis 的一级缓存 简单回顾下mybatis的一级缓存 本质上是一个基于map实现的内存级别的缓存&#xff0c;默认开启&#xff0c;生命周期是 sqlsession 级别的 为什么会失效 其实这个问题反向分析一下就会有思路了&#xff0c;一级缓存默认是sqlsession级别的&#xff0c;这个规…

2022年rust杂记

以下记录的是&#xff0c;我在学习中的一些学习笔记&#xff0c;这篇笔记是自己学习的学习大杂烩&#xff0c;主要用于记录&#xff0c;方便查找1、相关学习链接https://www.rust-lang.org/zh-CN/governance/ RUST 官网博客https://kaisery.github.io/trpl-zh-cn/&#xff08;最…

应用性能监控对DMS系统综合分析案例

背景 DMS系统是某汽车集团的经销商在线系统&#xff0c;是汽车集团的重要业务系统。本次分析重点针对DMS系统性能进行分析&#xff0c;以供安全取证、性能分析、网络质量监测以及深层网络分析。 该汽车总部已部署NetInside流量分析系统&#xff0c;使用流量分析系统提供实时和…

好好的系统,为什么要分库分表?

不急于上手实战 ShardingSphere 框架&#xff0c;先来复习下分库分表的基础概念&#xff0c;技术名词大多晦涩难懂&#xff0c;不要死记硬背理解最重要&#xff0c;当你捅破那层窗户纸&#xff0c;发现其实它也就那么回事。 什么是分库分表 分库分表是在海量数据下&#xff0…

51单片机学习笔记-14 ADDA

14 ADDA [toc] 注&#xff1a;笔记主要参考B站江科大自化协教学视频“51单片机入门教程-2020版 程序全程纯手打 从零开始入门”。 注&#xff1a;工程及代码文件放在了本人的Github仓库。 14.1 AD/DA简介 14.1.1 AD/DA基本介绍 AD&#xff08;Analog to Digital&#xff09;…

FreeRTOS任务管理

RTOS 的核心是如果高效管理各个任务及任务之间通信&#xff0c;本章将向大家介绍 FreeRTOS 的任务管理&#xff0c;通过本章的学习&#xff0c;让大家对 RTOS 任务的理解更加深入&#xff0c; 为后面的学习做好铺垫。本章分为如下几部分内容&#xff1a; 1 任务管理介绍 2 常用…

ue4c++日记7(动画蓝图)

FVector Speed Pawn->GetVelocity();//获取方向向量FVector xyspeed FVector(Speed.X, Speed.Y,0);//不要z方向MovementSpeed xyspeed.Size();//xy取长//角色是否处于下落状态IsJumping Pawn->GetMovementComponent()->IsFalling();//#include "GameFramewor…

FreeRTOS中的信号量实验

信号量是操作系统中重要的一部分&#xff0c;信号量一般用来进行资源管理和任务同 步&#xff0c;FreeRTOS 中信号量又分为二值信号量、计数型信号量、互斥信号量和递归 互斥信号量。不同的信号量其应用场景不同&#xff0c;但有些应用场景是可以互换着使用。 本章要实现的功能…

【数据结构从0到1之树的初识】

目录 1.树的表达方式 1.1 树的定义 1.2树的相关概念 1.3树的存储结构 1.3.1 双亲表示法 1.3.2 孩子表示法 1.3.3 孩子兄弟表示法 1.4树在实际中的应用 后记&#xff1a; &#x1f57a;作者&#xff1a; 迷茫的启明星 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点…

Lua 迭代器

Lua 迭代器 参考文章&#xff1a; 菜鸟教程。 https://cloud.tencent.com/developer/article/2203215 迭代器&#xff08;iterator&#xff09;是一种对象&#xff0c;它能够用来遍历标准模板库容器中的部分或全部元素&#xff0c;每个迭代器对象代表容器中的确定的地址。 在 L…

23种设计模式之七种结构型模式

23种设计模式之七种结构型模式1. 设计模式概述1.1 什么是设计模式1.2 设计模式的好处2. 设计原则分类3. 详解3.1 单一职责原则3.2 开闭原则3.3 里氏代换原则3.4 依赖倒转原则3.5 接口隔离原则3.6 合成复用原则3.7 迪米特法则4. Awakening1. 设计模式概述 我们的软件开发技术也包…

[Python从零到壹] 番外篇之可视化利用D3库实现CSDN博客每日统计效果(类似github)

欢迎大家来到“Python从零到壹”&#xff0c;在这里我将分享约200篇Python系列文章&#xff0c;带大家一起去学习和玩耍&#xff0c;看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解&#xff0c;真心想把自己近十年的编程经验分享给大家&#xff0c;希望…

关于对公司做项目的一些想法

项目管理法则里面最重要的是如下的三角形&#xff1a;基于一定的范围、合理的时间和足够的成本下实现项目完成&#xff0c;并保证质量。项目中最重要的是质量&#xff0c;质量不行就意味着项目失败&#xff0c;请参考大跃进时期的大炼钢铁&#xff08;多快好省大炼钢&#xff0…

是什么影响了 MySQL 索引 B + 树的高度?

提到 MySQL&#xff0c;想必大多后端同学都不会陌生&#xff0c;提到 B 树&#xff0c;想必还是有很大部分都知道 InnoDB 引擎的索引实现&#xff0c;利用了 B 树的数据结构。 那 InnoDB 的一棵 B 树可以存放多少行数据&#xff1f;它又有多高呢&#xff1f; 到底是哪些因…