C++中queue的用法(超详细,入门必看)

news2024/11/25 10:29:50

博主简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。
博主主页:@陈童学哦
所属专栏:C++STL

在这里插入图片描述

前言:Hello各位小伙伴们好!欢迎来到本专栏C++STL的学习,本专栏旨在帮助大家了解并熟悉使用C++中的STL,C++中的STL(标准模板库)是相当好用的,🍉🍉🍉所以大家赶紧订阅一起学起来叭!那么话不多说接下来就进入本文C++中queue的学习。

📢📢📢站点

  • ⭐一、queue的简介
  • ⭐二、queue的定义及初始化
  • ⭐三、queue中常用的成员函数
  • ⭐四、queue的遍历方法
  • ⭐五、queue的真题巩固
  • ⭐六、写在最后

⭐一、queue的简介

queue的中文译为队列队列是一种数据结构。C语言中队列的定义及初始化以及一些相关操作实现起来较为繁琐,而C++的queue让这些都变得简便易实现。因为C++中有着许多关于queue的方法函数。
队列(queue)最大的特点就是先进先出。就是说先放入queue容器的元素一定是要先出队列之后,比它后进入队列的元素才能够出队列。
举个生活中的例子吧。

假如你现在是一名学生,现在刚下课,你准备去食堂吃饭,但是刚下课的学校食堂吃饭的人一般都是比较多的,所以大家需要排队打饭,而下课跑得快的人排在前面就比排在后面的人先打到饭然后就出队找位置坐下吃饭了,由于你排在人家后面,所以你是不是得先等你前面的那坨人打完之后才能轮到你呀。

所以我一般下完课都是先回宿舍的,因为跑不赢他们,根本跑不赢😂😂。
而我们这里的队列(queue)和日常生活中的排队是类似的道理。

使用queue时需要包含头文件:

#include<queue>

⭐二、queue的定义及初始化

  • 定义
    queue<数据类型>容器名
    例:
//queue的定义 
queue<int>q1; //定义一个储存数据类型为int的queue容器q1 
queue<double>q2; //定义一个储存数据类型为double的queue容器q2
queue<string>q3; //定义一个储存数据类型为string的queue容器q3
queue<结构体类型>q4; //定义一个储存数据类型为结构体类型的queue容器q4

⭐三、queue中常用的成员函数

关于queue的常用函数:

back() //返回队列中最后一个元素 
empty() //判断队列是否为空 
front() //返回队列中的第一个元素 
pop() //删除队列的第一个元素 
push() //在队列末尾加入一个元素 
size() //返回队列中元素的个数 

示例代码:

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	queue<int> q; //定义一个数据类型为int的queue 
	q.push(1); //向队列中加入元素1 
	q.push(2); //向队列中加入元素2
	q.push(3); //向队列中加入元素3 
	q.push(4); //向队列中加入元素4 
	cout<<"将元素1、2、3、4一一加入队列中后,队列中现在的元素为:1、2、3、4"<<endl;
	cout<<"队列中的元素个数为:"<<q.size()<<endl;
	//判断队列是否为空 
	if(q.empty())
	{
		cout<<"队列为空"<<endl;
	}
	else
	{
		cout<<"队列不为空"<<endl;
	}
	cout<<"队列的队首元素为:"<<q.front()<<endl;
	//队列中的队首元素出队 
	q.pop();
	cout<<"将队列队首元素出队后,现在队列中的元素为2、3、4"<<endl;		
}

运行结果:

将元素1234一一加入队列中后,队列中现在的元素为:1234
队列中的元素个数为:4
队列不为空
队列的队首元素为:1
将队列队首元素出队后,现在队列中的元素为234

⭐四、queue的遍历方法

队列中的数据和堆栈一样是不允许随机访问的,即不能通过下标访问,且队列内的元素也是无法遍历的。

我们可以通过while循环的方法将queue中的元素读取一遍,但是这种方法非常局限,因为我们每读取一个元素就需要将这个元素出队,因此该方法只能读取一遍queue中的元素。

例:

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	queue<int> q; //定义一个数据类型为int的queue
	q.push(1); //向队列中加入元素1 
	q.push(2); //向队列中加入元素2
	q.push(3); //向队列中加入元素3
	q.push(4); //向队列中加入元素4
	while(!q.empty())
	{
		cout<<q.front()<<" ";
		q.pop();
	}	
}

⭐五、queue的真题巩固

下面是PTA中团体程序设计天梯赛-练习集的一道L2二阶题目,对于刚学习完本queue内容的小伙伴来讲做起来可能有点困难哈,但如果你会做了的话那你对于queue的掌握会是比较熟悉的一个状态!

下方为题目链接!!!!!!!!

--------------------L2-041 插松枝--------------------
题目详情:
在这里插入图片描述
人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上,做成大大小小的松枝。他们的工作流程(并不)是这样的:

  • 每人手边有一只小盒子,初始状态为空。
  • 每人面前有用不完的松枝干和一个推送器,每次推送一片随机型号的松针片。
  • 工人首先捡起一根空的松枝干,从小盒子里摸出最上面的一片松针 —— 如果小盒子是空的,就从推送器上取一片松针。将这片松针插到枝干的最下面。
  • 工人在插后面的松针时,需要保证,每一步插到一根非空松枝干上的松针片,不能比前一步插上的松针片大。如果小盒子中最上面的松针满足要求,就取之插好;否则去推送器上取一片。如果推送器上拿到的仍然不满足要求,就把拿到的这片堆放到小盒子里,继续去推送器上取下一片。注意这里假设小盒子里的松针片是按放入的顺序堆叠起来的,工人每次只能取出最上面(即最后放入)的一片。
  • 当下列三种情况之一发生时,工人会结束手里的松枝制作,开始做下一个:
    (1)小盒子已经满了,但推送器上取到的松针仍然不满足要求。此时将手中的松枝放到成品篮里,推送器上取到的松针压回推送器,开始下一根松枝的制作。

(2)小盒子中最上面的松针不满足要求,但推送器上已经没有松针了。此时将手中的松枝放到成品篮里,开始下一根松枝的制作。

(3)手中的松枝干上已经插满了松针,将之放到成品篮里,开始下一根松枝的制作。

现在给定推送器上顺序传过来的 N 片松针的大小,以及小盒子和松枝的容量,请你编写程序自动列出每根成品松枝的信息。

输入格式:
输入在第一行中给出 3 个正整数:N(≤10^3 ),为推送器上松针片的数量;M(≤20)为小盒子能存放的松针片的最大数量;K(≤5)为一根松枝干上能插的松针片的最大数量。

随后一行给出 N 个不超过 100 的正整数,为推送器上顺序推出的松针片的大小。

输出格式:
每支松枝成品的信息占一行,顺序给出自底向上每片松针的大小。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:
8 3 4
20 25 15 18 20 18 8 5

输出样例:
20 15
20 18 18 8
25 5

AC代码:

#include<bits/stdc++.h>
using namespace std;
stack<int>box;
queue<int>p,t;
int main()
{
	int n,m,k;
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)
	{
		int a;
		cin>>a;
		p.push(a);
	}
	while(p.size()||box.size())
	{
		t.push(101);
		while(t.size()<=k)
		{
			if(box.size()&&box.top()<=t.back())
			{
				t.push(box.top());
				box.pop();
			}
			else if(p.size()&&p.front()<=t.back())
			{
				t.push(p.front());
				p.pop();
			}
			else if(p.size()&&box.size()<m)
			{
				box.push(p.front());
				p.pop();
			}
			else 
				break;
		}
		t.pop();
		cout<<t.front();
		t.pop();
		while(t.size())
		{
			cout<<" "<<t.front();
			t.pop();
			
		}
		cout<<endl;
	}
}

⭐六、写在最后

OK本文的学习就到此结束啦,希望本文可以帮助到各位有需要的小伙伴们喔,也希望各位小伙伴们不要吝惜手里的三连哦!❤️❤️❤️

💕 回头看,轻舟已过万重山,向前看,前路漫漫亦漫漫。

🍁🍁🍁那么我们下期再见!拜拜ヾ(•ω•`)o
在这里插入图片描述

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

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

相关文章

轩辕:首个千亿级中文金融对话模型

背景 目前开源的大语言模型或多或少存在以下痛点&#xff1a; 缺少专门针对中文进行优化过的的大语言模型。 支持中文的开源模型的参数规模偏小&#xff0c;没有超过千亿。比如清华和智谱AI的ChatGLM-6B目前只开源了6B参数模型&#xff0c;盘古alpha也只开源了13B的模型。 支…

杨立昆:科学之路读书笔记1

杨立昆&#xff1a;科学之路读书笔记1 前言科学之路1读书缘由靠省钱&#xff0c;是混不出名堂的AI趣事话题交流 一起学AI系列博客&#xff1a;目录索引 前言 在贝尔实验室&#xff0c;靠节省开支&#xff0c;是无法混出名堂的。——《科学之路》 五一假期读的多&#xff0c;写的…

毫米波雷达点云 DBSCAN聚类算法

毫米雷达点云 DBSCAN聚类算法 聚类的目的聚类算法分类原型聚类层次聚类密度聚类 DBSCAN聚类算法原理相关定义算法流程以及伪代码DBSCAN算法优缺点DBSCAN参数选择聚类衡量指标 DBSCAN算法仿真DBSCAN代码DBSCAN算法对毫米波雷达点云数据进行聚类 聚类的目的 聚类的目的是将一组数…

认识http协议---3

hi,大家好,今天为大家带来http协议的相关知识 &#x1f347;1.http状态响应码 &#x1f347;2.构造http请求 1.直接在地址栏里输入一个URL 2.html的一些特殊标签,触发get请求 3.提交form表单,可以触发get请求和post请求 4.使用ajax &#x1f347;3.再次谈同步和异步 &#x1f3…

spark sql(四)物理计划解析

1、流程解析 在该系列第二篇文章中介绍了spark sql整体的解析流程&#xff0c;我们知道整体的sql解析分为未解析的逻辑计划&#xff08;Unresolved LogicalPlan&#xff09;、解析后的逻辑计划&#xff08;LogicalPlan&#xff09;、优化后的逻辑计划&#xff08;Optimized Lo…

HDFS学习笔记

HDFS1.0 1 什么是HDFS&#xff1f; HDFS的全称是&#xff1a;Hadoop DistributeFiles System&#xff0c;分布式文件系统。 在整个Hadoop技术体系中&#xff0c;HDFS提供了数据分布式存储的底层技术支持。 HDFS 由三个组件构成&#xff1a;NameNode&#xff08;NN&#xff…

排序算法:堆排序

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下栈和队列方面的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; 数据结构与算法专栏&#xff1a;数据结构与算法 个 人 …

算法|9.从暴力递归到动态规划2

9.算法|从暴力递归到动态规划2 1.数字字符串转英文字符串 题意&#xff1a;规定1和A对应、2和B对应、3和C对应…26和Z对应&#xff0c;那么一个数字字符串比如"111”就可以转化为:“AAA”、“KA"和"AK” 给定一个只有数字字符组成的字符串str&#xff0c;返回…

windows安装python开发环境

最近因工作需要&#xff0c;要学习一下python&#xff0c;所以先安装一下python的开发环境&#xff0c;比较简单 下载和安装Python 首先&#xff0c;在浏览器中打开Python的官方网站&#xff08;https://www.python.org/downloads/) 然后&#xff0c;从该网站下载与你的操…

NCI架构-1

1、NFCC和DH通过物理连线相连&#xff0c;物理连线对应为Transport Layer&#xff08;传输层&#xff09;&#xff0c;支持SPI、I2C、UART、USB等&#xff1b; 2、DH中所有和NFC相关的应用程序都可视为DH-NFCEE(EE:Execution Enviroment)&#xff0c;图左的NFCEE模块可运行一些…

Linux系统中源码安装1.8.x版本Arduino IDE

本文内容参考&#xff1a; Ubuntu22.04安装Arduino IDE及Arduino UNO&#xff08;使用CH341驱动&#xff09;调试方法__KILLMILEDC_的博客-CSDN博客 在Linux上下载arduino_不说话的白帽子的博客-CSDN博客 https://guoqing.blog.csdn.net/article/details/88913063?spm1001.…

【JVM】8. 对象实例化及直接内存

文章目录 8.1. 对象实例化8.1.1. 创建对象的方式8.1.2. 创建对象的步骤1. 判断对象对应的类是否加载、链接、初始化2. 为对象分配内存3. 处理并发问题4. 初始化分配到的内存5. 设置对象的对象头6. 执行init方法进行初始化 8.2. 对象内存布局8.2.1. 对象头&#xff08;Header&am…

python+vue新能源汽车在线租赁管理系统pycharm项目

开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm 在当今高度发达的信息中&#xff0c;信息管理改革已成为一种更加广泛和全面的趋势。 “新…

SpringBoot——原理(自动配置+原理分析@Conditional)

在上一篇有说到&#xff0c;进行源码跟踪时可以看见一个以Conditional开头的注解&#xff0c;这些都是条件装配的注解。 加在方法上时只对该方法生效&#xff0c;加在类上时是对整个配置类都有效。 这里只说三个常用的Conditional的子注解 案例演示 在启动类上加上一个Enabl…

第二章:ShardingSphere简介

什么是ShardingSphere 何为ShardingSphere呢?其实我们总结如下三点就能很好的理解: 1、一整套开源的分布式数据库中间件解决方案 2、有三个产品组成:Sharding-JDBC、Sharding-Proxy、Sharding-Sidecar(规划中) 3、他的定位是关系型数据库的中间件,在分布式环境下合理的…

【20】SCI易中期刊推荐——计算机信息系统工程电子与电气(中科院3区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

(转载)matlab遗传算法工具箱

以下内容大部分来源于《MATLAB智能算法30个案例分析》&#xff0c;仅为学习交流所用。 1理论基础 1.1遗传算法概述 遗传算法(genetic algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法是把问题参数编码为染色体,再利用迭代…

Qiskit系列(1)---Qiskit安装

1.qiskit与anaconda简介 Qiskit并不是一门独立的语言&#xff0c;它是基于Python的一个框架&#xff0c;就好比Pytorch, Tensorflow。而Qiskit这个框架需要配套一些其他的package&#xff08;各种大小DLC&#xff09;一起运行&#xff0c;这些运行Qiskit所必须的package就构成了…

vue前端分页功能怎么实现

Vue前端分页功能可以通过以下几个步骤实现&#xff1a; 1. 安装分页组件库&#xff08;如vue-pagination-2&#xff09;&#xff1a; bash npm install vue-pagination-2 2. 在Vue项目中引入并注册分页组件&#xff1a; javascript import Vue from vue; import Pagination fr…

【商品详情 +关键词搜索】API 接口系列

首先&#xff0c;大家要到官方主页去申请一个 appkey&#xff0c;这个是做什么用的呢&#xff1f;App Key 是应用的唯一标识&#xff0c;TOP 通过 App Key 来鉴别应用的身份。AppSecret 是 TOP 给应用分配的密钥&#xff0c;开发者需要妥善保存这个密钥&#xff0c;这个密钥用来…