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

news/2024/11/23 20:49:52/

博主简介: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); //向队列中加入元素2q.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的queueq.push(1); //向队列中加入元素1 q.push(2); //向队列中加入元素2q.push(3); //向队列中加入元素3q.push(4); //向队列中加入元素4while(!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.ppmy.cn/news/97590.html

相关文章

认识http协议---3

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

JavaEE Tomcat Servelet第一个helloworld程序

Tomcat & Servelet第一个程序helloworld&#xff01; 文章目录 JavaEE & Tomcat & 第一个Servelet程序1. HTTP服务器 - Tomcat1.1 Tomcat的目录结构&#xff1a;1.2 启动Tomcat1.3 Tomcat的优点 2. Servelet框架2.1 创建Maven项目2.2 引入依赖2.3 创建目录2.4 写代…

Mac电脑读写移动硬盘软件Tuxera NTFS2023中文版

日常工作中&#xff0c;我们经常会使用移动硬盘拷贝文件&#xff0c;因为移动硬盘传输文件方便、传输速度快。但我们在mac电脑上使用移动硬盘却发现硬盘无法正常读写。本文向大家介绍mac能读写的移动硬盘有哪些以及移动硬盘怎么在mac上读写。 一、Mac能读写的移动硬盘有哪些 移…

开源情报搜集系统的核心技术

随着科技快速发展&#xff0c;科研方向的开源情报搜集系统的应用越来越广泛。为了满足科研工作者的需求&#xff0c;开发人员大力研发了许多功能强大的科研开源情报系统。这些系统不仅可以帮助科研人员更加高效地获取、管理和利用科研信息资源&#xff0c;还能为他们提供全方位…

有序表2:跳表

跳表是一个随机化的数据结构&#xff0c;可以被看做二叉树的一个变种&#xff0c;它在性能上和红黑树&#xff0c;AVL树不相上下&#xff0c;但是跳表的原理非常简单&#xff0c;目前在Redis和LeveIDB中都有用到。 它采用随机技术决定链表中哪些节点应增加向前指针以及在该节点…

Hadoop---10、生产调优手册

1、HDFS—核心参数 1.1 NameNode 内存生产配置 1、NameNode内存计算 每个文件块大概占用150byte&#xff0c;一台服务器128G内存为例&#xff0c;能储存多少文件块呢&#xff1f; 12810241024*1024/150Byte ≈ 9.1 亿 G M KB Byte 2、Hadoop2.x系列&#xff0c;配置 NameNode…

Python实现ACO蚁群优化算法优化卷积神经网络分类模型(CNN分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

2023-5-28第二十八天

denote象征&#xff0c;预示&#xff0c;表示 lexical词汇的 literary文学的 derelict荒废的&#xff0c;乞丐 exclamation感叹号 significant重要的&#xff0c;显著的 convert转变 substantial大量的&#xff0c;基本的&#xff0c;重大的 efficiently有效&#xff0…