【STL】C++ queue队列(包含优先级队列) 基本使用

目录

一 queue

1 常见构造

1 空容器构造函数

2. 使用指定容器构造

3 拷贝构造函数

2 empty

3  size

4 front && back

5 push && pop

6 emplace

7 swap

二 优先级队列( priority_queue)

1 常见构造

2 其他操作

3 大堆和小堆

1. 大小堆切换

2 自定义类型比较

三 总结


一 queue

1 常见构造

1 空容器构造函数

构造一个没有元素的空容器。

2. 使用指定容器构造

可以使用指定的底层容器来构造栈,默认是 std::deque,但也可以是 std::vector 或 std::list

3 拷贝构造函数

构造一个容器,其中包含 x 中每个元素的副本,顺序相同

void Test1()
{queue<int> q1;cout << q1.size() << endl;vector<int> v{ 1, 2, 3, 4 };queue<int, vector<int>> q2(v);cout << q2.size() << endl;queue<int> q3(q1);cout << q3.size() << endl;
}

2 empty

测试容器是否为空

bool empty() const;
void Test2()
{queue<int> q1;if (q1.empty()) cout << "q1 is empty" << endl;else cout << "q1 is not empty" << endl;vector<int> v{ 1, 2, 3, 4 };queue<int, vector<int>> q2(v);if (q2.empty()) cout << "q2 is empty" << endl;else cout << "q2 is not empty" << endl;}

3  size

返回容器大小

上面已经演示过了, 这里不做过多讲解

4 front && back

返回对头元素和队尾元素

value_type& front(); 
const value_type& front() const;value_type& back(); 
const value_type& back() const;
void Test3()
{vector<int> v{ 1, 2, 3, 4 };queue<int, vector<int>> q2(v);cout << "front: " << q2.front() << endl;cout << "back: " << q2.back() << endl;
}

5 push && pop

void push(const value_type& val); 
void push(value_type&& val);
void pop();
void Test4()
{queue<int> q;for (int i = 0; i < 4; i++){q.push(i);}while (!q.empty()){cout << q.front() << " ";q.pop();}
}

6 emplace

 作用和 push一样的, 只是效率不一样, 涉及到了右值引用问题, 后面讲

7 swap

void swap (queue& x) noexcept(/*see below*/);

交换两个容器的内容

void Test5()
{queue<int> q1, q2;for (int i = 0; i < 4; i++){q2.push(i);}q1.swap(q2);cout << "q1.size--> " << q1.size() << endl;cout << "q2.size--> " << q2.size() << endl;
}

二 优先级队列( priority_queue)

1 常见构造

同queue一样

void Test6()
{priority_queue<int> q1;cout << q1.size() << endl;vector<int> v{ 1, 2, 3, 4 };priority_queue<int, vector<int>> q2(v.begin(), v.end());// 这里不同queuecout << q2.size() << endl;priority_queue<int> q3(q1);cout << q3.size() << endl;
}

2 其他操作

同 queue一样, 很简单 

3 大堆和小堆

1. 大小堆切换

#include <vector>
#include <queue>
#include <functional> // greater算法的头文件
void TestPriorityQueue()
{// 默认情况下,创建的是大堆,其底层按照小于号比较vector<int> v{ 3,2,7,6,0,4,1,9,8,5 };priority_queue<int> q1;for (auto& e : v){q1.push(e);}while (!q1.empty()){cout << q1.top() << ' ';q1.pop();}cout << endl;// 如果要创建小堆,将第三个模板参数换成greater比较方式priority_queue<int, vector<int>, greater<int>> q2(v.begin(), v.end());while (!q2.empty()){cout << q2.top() << ' ';q2.pop();}
}int main()
{TestPriorityQueue();return 0;
}

2 自定义类型比较

如果在priority_queue中放自定义类型的数据,用户需要在自定义类型中提供> 或者< 的重载。 

class Date
{
public:Date(int year = 1900, int month = 1, int day = 1): _year(year), _month(month), _day(day){}bool operator<(const Date& d)const{return (_year < d._year) ||(_year == d._year && _month < d._month) ||(_year == d._year && _month == d._month && _day < d._day);}bool operator>(const Date& d)const{return (_year > d._year) ||(_year == d._year && _month > d._month) ||(_year == d._year && _month == d._month && _day > d._day);}friend ostream& operator<<(ostream& _cout, const Date& d){_cout << d._year << "-" << d._month << "-" << d._day;return _cout;}
private:int _year;int _month;int _day;
};
void TestPriorityQueue2()
{// 大堆,需要用户在自定义类型中提供<的重载priority_queue<Date> q1;q1.push(Date(2018, 10, 29));q1.push(Date(2018, 10, 28));q1.push(Date(2018, 10, 30));cout << q1.top() << endl;// 如果要创建小堆,需要用户提供>的重载priority_queue<Date, vector<Date>, greater<Date>> q2;q2.push(Date(2018, 10, 29));q2.push(Date(2018, 10, 28));q2.push(Date(2018, 10, 30));cout << q2.top() << endl;
}

三 总结

本节难度不算大, 但是优先级队列涉及到了前面大小堆知识, 对概念不清晰的可以看看我前面的排序章节

昨天游泳了, 今天全身酸痛. 大家一定要做到生活平很, 锻炼纳入到自己学习和工作中. 

前段日子, 不是蓝桥杯嘛, 搞了个省三, 因为学校的一些傻逼操作导致我丧失一个半小时时间, 有一道很难的DFS决策树问题, 测试完毕没问题,可是没时间提交了, 差几秒. 虽然我觉得省三没啥技术含量, 然后学校的傻逼操作对我也是心态打击. 但是感觉老爸挺高兴的, 又发朋友圈又给我发红包的, 我还是很开心, 下次再来吧. 

继续加油

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

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

相关文章

scGPT实验解读

本篇内容为发表在Nature Methods上的scGPT的部分实验内容 来自&#xff1a;scGPT: toward building a foundation model for single-cell multi-omics using generative AI, Nature Methods, 2024 目录 scGPT揭示特定细胞状态的基因网络缩放法则和迁移学习中的上下文效应 scGP…

寄存器、缓存、内存(虚拟、物理地址)、DDR、RAM的关系

寄存器、缓存、内存、DDR、RAM的关系 1. 主要概念内部存储器&#xff1a;2.1 寄存器&#xff0c;register2.2 主存储器&#xff0c;内存&#xff0c;memory2.3 缓存&#xff0c;高速缓冲存储器&#xff0c;cache 外部存储器2.4 快闪存储器&#xff0c;闪存&#xff0c;flash Me…

AI图书推荐:使用GPT-4和ChatGPT开发AI应用APP

这本书是面向想要学习如何使用大型语言模型构建应用程序的 Python 开发人员的全面指南。作者 Olivier Caelen 和 Marie-Alice Blete 涵盖了 GPT-4 和 ChatGPT 的主要特征和好处&#xff0c;并解释了它们的工作原理。您还将获得使用 GPT-4 和 ChatGPT Python 库开发应用程序的逐…

多台相同IP产品如何组网?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Unity协程详解

什么是协程 协程&#xff0c;即Coroutine&#xff08;协同程序&#xff09;&#xff0c;就是开启一段和主程序异步执行的逻辑处理&#xff0c;什么是异步执行&#xff0c;异步执行是指程序的执行并不是按照从上往下执行。如果我们学过c语言&#xff0c;我们应该知道&#xff0…

【零基础AI】Windows下最易懂的Cuda+cudnn+PyTorch配置教程

【零基础AI】最易懂的Windows下CUDAcuDNNPyTorch配置教程 本文面向零基础的AI初学者以及迁移DL开发环境的相关人员&#xff0c;旨在通过最直观、最简洁的一条龙式图文配置教程&#xff0c;最大程度地降低学习门槛与迁移环境的成本。在配置工作开始之前&#xff0c;请务必检查确…

U-boot、linux内核、根文件系统移植以及程序

终于这几天把这个移植的流程过了一遍&#xff0c;所以特此回来总结。 U-boot移植 首先是U-boot移植。Linux 系统要启动就必须需要一个 bootloader 程序&#xff0c;也就说芯片上电以后先运行一段bootloader 程序。这段bootloader程序会先初始化DDR等外设&#xff0c;然后将Li…

算法-堆结构和堆排序

文章目录 本节大纲1. 堆结构2. 堆排序本节的代码实现合集 本节大纲 1. 堆结构 堆结构是为集合类里面的优先级队列来服务的 优先级队列其实就是顺序存储的二叉树结构, 我们的底层的源码里面是没有链式存储的二叉树的,二叉树的实现的细节是通过我们的数组来模拟实现的 底层的实现…

TFTP服务器

软件&#xff0c;客户端&#xff0c;服务器。是简单的文件传输文件。 1.TFTP服务器介绍 是简单的文件传输协议&#xff0c;是tcp/IP协议的一个用来在客户端与服务器之间进行简单文件传输的协议。端口号为69。每个服务器都有自己都端口号。 2.TFTP文件传输特点 3. 二:TFTP环境…

c++异常处理exception

// c中的异常处理 // 1.throw &#xff1a; 专门用于抛出异常&#xff0c;做出提示 // 2.try &#xff1a; 尝试运行可能会异常的代码 // 3.catch &#xff1a; 用于接收前面跑出来的异常并进行解决// 执行循序为: // try // { // throw ...; // 执行的代码中必须直接或者…

VRTK4教程 二:基本追踪

文章目录 untiyXR和UnityXRPluginFramwork使用方法&#xff1a; TrackedAlias使用方法使用技巧 untiyXR和UnityXRPluginFramwork 这两个用于跟踪头盔位置&#xff0c;其中UnityXR使用的是旧版API&#xff0c;另一个是新版API&#xff0c;两个我我们选一个即可 使用方法&#…

6.3 Go 结构体(Struct)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【计算机毕设】SpringBoot校园资料分享平台的设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的校园资料分享平台&#xff0c;以满足学生在学习过程中对资料分享和获取的需求。具体目标包括&#xff1a…

Java学习笔记 集合的使用

在实际的项目中开发过程中&#xff0c;会有很多的对象&#xff0c;如何高效、方便的管理这些对象&#xff0c;是影响程序性能与可维护性的重要环节。在Java语言中为这个问题提供了一套完美的解决方案&#xff0c;也就是接下来要介绍的集合框架。 1.1 集合框架的结构 从Collect…

都说美国去工业化了,那美国人都做什么工作啊?

美国&#xff0c;这个全球经济的重要参与者&#xff0c;经历了一场深刻的变革——去工业化。这一过程意味着&#xff0c;曾经以制造业为荣的美国&#xff0c;逐渐将重心转移到了其他领域。那么&#xff0c;美国人都做什么工作呢&#xff1f;让我们走近这位“经济体巨人”&#…

MySql 查询缓存

前言 MySQL的查询缓存&#xff08;Query Cache&#xff09;是一个在内存中存储SELECT语句及其结果集的机制&#xff0c;目的是避免对相同的查询进行重复的解析、编译和执行&#xff0c;从而提高数据库性能。 Mysql 结构图如下&#xff1a; 查询缓存的工作流程大致如下&#…

Java中连接Mongodb进行操作

文章目录 1.引入Java驱动依赖2.快速开始2.1 先在monsh连接建立collection2.2 java中快速开始2.3 Insert a Document2.4 Update a Document2.5 Find a Document2.6 Delete a Document 1.引入Java驱动依赖 注意&#xff1a;启动服务的时候需要加ip绑定 需要引入依赖 <dependen…

【魅力网页的背后】:CSS基础魔法,从零打造视觉盛宴

文章目录 &#x1f680;一、css基础知识⭐1. 认识css &#x1f308;二、选择器初级❤️id与class命名 &#x1f680;一、css基础知识 ⭐1. 认识css 概念 CSS(英文全称&#xff1a;Cascading Style Sheets)&#xff0c;层叠样式表。它是网页的装饰者&#xff0c;用来修饰各标签…

QT 使用信号和槽,让QLabel的内容实时与QLineEdit同步,类似vue框架的双向绑定

在窗口里放置一个单行文本编辑器&#xff08;QLineEdit&#xff09;和一个标签控件&#xff08;QLabel&#xff09;&#xff0c;实现的效果就是当编辑器的内容被编辑时&#xff0c;标 签控件同步显 示编辑控件里的内容 1&#xff09;当 lineEdit 控件被用户编辑时&#xff0c;它…

无人机路径规划:基于鸽群优化算法PIO的无人机三维路径规划MATLAB代码

一、无人机模型介绍 无人机三维航迹规划_无人机航迹规划-CSDN博客 二、部分代码 close all clear clc warning (off) global model global gca1 gca2 gca3 gca4 model CreateModel(); % Create search map and parameters load(BestPosition5.mat); load(ConvergenceCurve5…