【跟学C++】C++队列——queue类(Study13)

news/2024/5/19 0:08:15/文章来源:https://blog.csdn.net/qq_41225961/article/details/127126014

文章目录

      • 1、队列
      • 2、队列--queue类的使用
        • 2.1 实例化queue
        • 2.2 queue的成员函数
      • 3、优先级队列--priority_queue类的使用
        • 3.1 实例化priority_queue
        • 3.1 priority_queued的成员函数
      • 4、总结

 ============================ 【说明】 ===================================================
  大家好,本专栏主要是跟学C++内容,自己学习了这位博主【 AI菌】的【C++21天养成计划】,讲的十分清晰,适合小白,希望给这位博主多点关注、收藏、点赞。
  主要针对所学内容,通过自己的理解进行整理,希望大家积极交流、探讨,多给意见。后面也会给大家更新,其他一些知识。若有侵权,联系删除!共同维护网络知识权利!
 =======================================================================================

1、队列

  队列是数据结构与算法中比较重要的一节,它强调一端增加(入队)和另一端删除(出队)元素,是一种先进先出(后进后出)的结构。具体内容可以跳转数据结构–队列部分–>数据结构。
  其实,队列并不难理解,队列可以联想到我们平时排队。但是在编程语言中,队列是一种怎样的存在呢?
  其实也是类似的,可以将队列视为在排队做核酸的我们,那么先加入这个队列的人就会先进行核酸检测;而后加入的人不能插队,只能从队尾开始排队。

2、队列–queue类的使用

  在实际问题中,仅仅了解队列的含义是不够的,我们还需要在实际编程中去使用它。在C++中,已经提供了用于队列操作的queue类。给我们使用队列提供了很大的方便。
  STL queue是一个模板类,它只允许在末尾插入元素,并且从开头删除元素。在使用之前,必须包含
头文件:

include <queue>

2.1 实例化queue

  在C++中,对queue类的定义如下:

template<class elementType,class Container = deque<Type>
>class queue;

说明:
  1. elementType 是queue对象包含元素的类型
  2. Containerstd::queue用于存储元素的集合类型,默认是deque,也可将该参数设置为list、vector

  当需要使用queue类进行队列操作时,我们就需要实例化:

#include <iostream>
#include <queue>
#include <list>
using namespace std;int main()
{//1. 实例化一个整型队列nums,用来存放int类型元素queue<int> nums;//2. 实例化一个浮点型队列doubleNumsqueue<double> doubleNums;//3. 创建一个队列,元素类型为double,并使用list存储这些元素queue<double, list<double>> doubleList;//4. 使用一个queue(nums)去实例化另一个queue(numsCopy)queue<int> numsCopy(nums);return 0;
}

2.2 queue的成员函数

  我们需要灵活使用队列,仅学会实例化创建queue是不够的,还需要学习queue的成员函数,从而更方便的处理队列问题。我们常见的queue类成员函数有:

函数名解释
push在队尾增加一个元素
pop在队头删除一个元素
front返回指向队首元素的引用
back返回指向队尾元素的引用
empty检查队列是否为空,并返回布尔值
size返回队列中元素个数

注: queue没有提供begin()end()函数,所以不能使用迭代器,因此无法将STL算法用于queue。这样设计,也是为了queue类只能进行符合队列行为的操作。

  下面通过案例来熟悉一下以上常见的成员函数:

#include <iostream>
#include <queue>
using namespace std;int main(){queue<int> nums; // 实例化一个整型队列nums,用来存放int类型元素cout << "依次将1、5、10、15插入队尾" << endl;nums.push(1);nums.push(5);nums.push(10);nums.push(15);cout << "The queue 【nums】 has " << nums.size() << " numbers." << endl;cout << "The queue 【nums】 first number: " << nums.size() << endl;cout << "The queue 【nums】 last number: " << nums.back() << endl;nums.pop();nums.pop();nums.pop();nums.pop();if (nums.empty())cout << "该队列是空的!" << endl;return 0;
}

在这里插入图片描述

3、优先级队列–priority_queue类的使用

  priority_queue类与queue类最大的不同之处在于:priority_queue类包含最大值的元素位于队首,且只能在队首执行操作。
  priority_queue类和queue类一样也是模板类,使用之前,必须包含头文件:

#include <queue>

3.1 实例化priority_queue

  在C++中,对priority_queue类的定义如下:

template<class elementType,class Container=vector<Type>,class Compare=less<typename Container::value_type>
>
>class priority_queue

说明:
  1. elementType 指定了优先级队列包含元素的类型;
  2. Containerpriority_queue用于存储元素的集合类型,默认是vector,也可将该参数设置为list、deque。
  3. Compare 用来指定一个二元谓词,以判断哪个元素位于队首。如果没有指定二元谓词,将默认使用std::less,它使用运算符<比较对象。
     二元谓词是:返回bool型,帮助决策的二元函数。二元谓词可用于stl:sort()等排序算法中。

  
  创建一个元素类型为int, 按从小到大顺序存储的队列,且指定存储的容器为deque:

priority_queue <int, deque<int>, greater<int>> nums;

  如果想改变存储的顺序,希望从大到小存储;只需将greater改为less:

priority_queue <int, deque<int>, less<int>> nums;

  
  当需要使用priority_queued类进行队列操作时,我们就需要实例化:

#include <iostream>
#include <queue>
using namespace std;
int main()
{//1. 实例化一个整型优先队列nums,用来存放int类型元素priority_queue<int> nums;//2. 实例化一个浮点型优先队列doubleNumspriority_queue<double> doubleNums;//3. 创建一个元素类型为int,按从小到大顺序存储的队列,且指定存储的容器为dequepriority_queue <int, deque<int>, greater<int>> nums;//4. 使用一个优先级队列nums去实例化另一个优先级队列numsCopypriority_queue<int> numsCopy(nums);return 0;
}

3.1 priority_queued的成员函数

  我们需要灵活使用队列,仅学会实例化创建priority_queued是不够的,还需要学习priority_queued的成员函数,从而更方便的处理队列问题。我们常见的priority_queued类成员函数有:

函数名解释
push在优先级队尾增加一个元素
pop在优先级队头删除一个元素
empty检查队列是否为空,并返回布尔值
size返回优先级队列中元素个数
emplace在优先级队列中,插入一个新元素
top返回指向队首第一个元素(最大元素)的引用

注:当使用默认的二元谓词std::less时, top()返回的是最大元素;当指定二元谓词是greater, 即从小到大的顺序存储,则top()返回的值是最小元素。

  下面通过案例来熟悉一下以上常见的成员函数:

//队列
int main() {priority_queue<int> nums;cout << "push 1,3,5,7 into queue 【nums】:"<<endl;nums.push(1);nums.push(5);nums.push(-1);nums.push(100);cout << "The queue 【nums】 has " << nums.size() << " numbers." << endl;cout << "The front number is:" << nums.top() << endl;cout << "The back number is:" << nums.top() << endl;for (int i = 0; i < 4; i++){cout << "Pop the number:" << nums.top() << endl;nums.pop();}if (nums.empty()){cout << "The queue 【nums】 is empty!" << endl;}return 0;
}

在这里插入图片描述

4、总结

  最后,长话短说,大家看完就好好动手实践一下,切记不能三分钟热度、三天打鱼,两天晒网。大家也可以自己尝试写写博客,来记录大家平时学习的进度,可以和网上众多学者一起交流、探讨,我也会及时更新,来督促自己学习进度。一开始提及的博主【AI菌】,个人已关注,并订阅了相关专栏(对我有帮助的),希望大家觉得不错的可以点赞、关注、收藏。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多测师肖sir_高级讲师_第2个月第21讲解jmeter安装

一、安装流程&#xff1a; 1、安装jdk &#xff08;linux&#xff0c;windows上&#xff09;&#xff0c;jdk编译java语言&#xff0c; 2、jdk环境配置&#xff0c;dos中java -version 查看jdk版本 3、下载jmeter包&#xff0c;解压&#xff0c;bin 目录 &#xff0c;jmeter.ba…

从零开始配置vim(25)——关于 c++ python 的配置

从9月份到国庆这段时间,因为得了女儿,于是回老家帮忙料理家事以及陪伴老婆和女儿。一时之间无暇顾及该系列教程的更新。等我回来的时候发现很多小伙伴私信我催更。在这里向支持本人这一拙劣教程的各位小伙伴表示真诚的感谢。言归正传,让我们开始吧 之前我们根据lua语言配置了…

(附源码)计算机毕业设计ssm电子购物商城

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【DL】第 11 章:自动驾驶汽车的深度学习

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

《uni-app》一个非canvas的飞机对战小游戏-启动页

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e;接下来的几篇都是uni-app的小实战&#xff0c;有助于我们更好的去学习u…

基于微信小程序的校园失物招领寻物启事系统 java uniapp 小程序

随着信息化时代的到来,管理系统都趋向于智能化、系统化,微信小程序校园失物招领也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而微信小程序校园失物招领能很好地解决这一问题,轻松应对校园失物招领平…

老项目vue2.x误用了vue3的插件问题

老项目vue2.x误用了vue3的插件问题背景插件vue-template-compilervue-loader问题回溯总结背景 vue3出来两年多了&#xff0c;它刚出来的时候&#xff0c;vue3相比vue2似乎并没有想像中那样受大家欢迎。因为两个版本的构架上相差太大了&#xff0c;许多的API都不兼容&#xff0…

洛谷题单 Part 2.4 分治

分治 即分而治之 将大问题化解为小问题逐一求解 这种题没有固定的模板 只有分治的思想 所以在做题的时候应当多想如何将一个大问题化解成若干个子问题进行求解 直接上题了 P1226 【模板】快速幂||取余运算 非常经典的分治问题 常规算法求aba^bab要O(b)O(b)O(b)的时间复杂度 我…

Mybatis常见查询总结,仅限于初级程序员阅读

情况描述&#xff1a; 本人初次接触Mybatis&#xff0c;然后对于其中的一些基础查询做一些简单总结&#xff0c;一次用来记录他的用法&#xff0c;便于以后查漏补缺。 1、Mybatis中查询特定的列:&#xff08;单列&#xff09; 如果查询指定列为Long类型&#xff0c;那么在re…

游戏合作伙伴专题:BreederDAO 与 Affyn一起重构现实生活

BreederDAO 团队很宣布与 Affyn 建立了新的合作关系&#xff0c;Affyn 是一家位于新加坡的公司&#xff0c;开发了基于地理位置的增强现实移动游戏。 移动元宇宙 Affyn 团队由来自 EA、任天堂、迪士尼和星巴克等顶级游戏、娱乐和生活方式公司的资深员工组成。他们洞悉了目前边玩…

html5网页设计作业代码 大学生校园网站制作 学校官网制作html

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

性能大PK count(*)、count(1)和count(列)

最近的工作中&#xff0c;我听到组内两名研发同学在交流数据统计性能的时候&#xff0c;聊到了以下内容&#xff1a; 数据统计你怎么能用 count() 统计数据呢&#xff0c;count() 太慢了&#xff0c;要是把数据库搞垮了那不就完了么&#xff0c;赶紧改用 count(1)&#xff0c;这…

基于Gossip的online server

在游戏服务端架构中online server,有些也叫center server。 主要承载以下功能:存储玩家的在线信息,处理上线和下线消息。 转发消息给特定玩家。online server在架构图中的位置online server集群内部架构图,以3个实例为例:特点:svr之间相互连接,采用Gossip协议通信。 各s…

MCMS 审计之路

MCMS 是 J2EE 系统&#xff0c;完整开源的Java CMS&#xff0c;基于SpringBoot 2架构&#xff0c;前端基于vue、element ui。为开发者提供上百套免费模板,同时提供适用的插件&#xff08;文章、商城、微信、论坛、会员、评论、支付、积分、工作流、任务调度等...&#xff09;&a…

大学网课查题系统

大学网课查题系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳…

VB6开发 用户控件OCX

VB6 中创建一个主窗体工程后,再添加一个 ActiveX用户控件工程 在用户控件窗体中可以添加 文本框和按钮的控件 属性Public strUrl As String方法发送消息 Public Sub WebSocketSendMsg(ByVal SendMsg As String) On Error GoTo ErrTrapDim sMsg As StringsMsg = msgInput.TextC…

公众号网课答案系统搭建

公众号网课答案系统搭建 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;…

Java I/O流和反射机制

文章目录File类操作文件或目录属性认识Java的流使用字节流读写文本文件使用字节流类FileInputStream读文本文件使用字节流类FileOutputStream写文本文件使用字符流读写文本文件使用字符流类BufferedReader和FileReader读文本文件使用字符流类BufferedWrite和FileWrite写文本文件…

公众号订阅通知

洛塔服务号回复010获取代码。 功能说明 公众号订阅通知这个功能&#xff0c;微信本来打算替代掉模板消息和一次性订阅的&#xff0c;最后也没替代掉&#xff0c;成为单独的一个功能。 个人感觉和一次性订阅是没有太大区别的&#xff0c;只不过增加了一个长期订阅&#xff0c;…

2022测试工作太难找,怎样才能优先获得面试机会?

软件测试岗位前期门槛低&#xff0c;但是想要拿到高薪真没那么简单。工作 2-3 年薪资还在原地打转的同学&#xff0c;都大有人在。 根据我对招聘需求的研究&#xff0c;以及跟拿到高薪的同学交流发现&#xff0c;他们普遍被要求&#xff1a; 1、学历 在学历方面&#xff0c;…