【跟学C++】C++队列——queue类(Study13)
文章目录
- 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. Container
是std::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. Container
是priority_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菌】,个人已关注,并订阅了相关专栏(对我有帮助的),希望大家觉得不错的可以点赞、关注、收藏。
【跟学C++】C++队列——queue类(Study13)相关推荐
- 看动画学算法之:队列queue
文章目录 简介 队列的实现 队列的数组实现 队列的动态数组实现 队列的链表实现 队列的时间复杂度 简介 队列Queue是一个非常常见的数据结构,所谓队列就是先进先出的序列结构. 想象一下我们日常的排队 ...
- oracle 删除 queue,C++ stl队列Queue用法介绍:删除,插入等操作代码举例
c++队列queue模板类的定义在头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型. C++队列Queue是一种容 ...
- C++标准库类模板(stack)和 队列(queue)
在C++标准库(STL)中有栈和队列的类模板,因此可以直接使用 1.栈(stack):使用栈之前,要先包含头文件 : #include<stack> stack.push(elem); / ...
- Java黑皮书课后题第10章:*10.10(Queue类)10.6节给出一个Stock类。设计一个名为Queue的类用于存储整数。像栈一样,队列保存元素。在栈中,元素后进先出。队列中元素先进先出
10.10(Queue类)10.6节给出一个Stock类,设计一个名为Queue的类用于存储整数 题目 程序 破题 代码 Test10.java Test10_Queue.java UML 题目 程序 ...
- JS算法探险之队列(Queue)
❝ 乔布斯经常说到一句话:"Stay hungry, Stay foolish" 「Stay hungry」:永不满足, 「Stay foolish」: 是说埋头做自己的事,不要理 ...
- PYTHON——多线程:队列Queue数据结构
1.队列模块简介 队列是一种数据结构,用于存放数据,类似列表.它是先进先出模式(FIFO模式),类似管道一般: 单线程不需要用到队列Queue,它主要用在多线程之间的,Queue称为多线程利器. 列表 ...
- 35 线程优先级队列(queue)
Python的queue模块中提供了同步的.线程安全的队列类,包括先进先出队列Queue.后进先出队列LifoQueue和优先级队列PriorityQueue.这些队列都是先了锁原语,可以直接使用来实 ...
- python queue 查询是否在队列中_python队列Queue的详解
Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...
- 多线程中的应用之队列(queue)
队列queue 多应用在多线程中,对于多线程访问共享变量时,队列queue是线程安全的. 从queue队列的实现来看,队列使用了1个线程互斥锁(pthread.Lock()),以及3个条件标量(pth ...
最新文章
- 一分钟AI | 腾讯市值超5000亿美元创亚洲最高!CV杀红脸了:AI国家队云从科技完成25亿B轮融资
- 赠票 | 第三届语言与智能高峰论坛200个免费参会名额!
- ThinkSNS积分商城系统 一站式解决企业商城建站需求
- python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO
- war 发布后页面不更新_一文看懂tomcat8如何配置web页面管理
- 前端学习(1171):includes方法
- (转)令人无法理解的死锁案例分析
- 服务器响应速度是上行速度吗,服务器带宽与速度之间的关系
- 如何重命名Git标签?
- js,jquery小知识点
- 网页模板----01
- 粒子群优化算法matlab实现,粒子群优化算法的MATLAB程序实现+源程序
- Java后台获取Cookie
- WX系列无线漫游的配置
- JavaScript中的事件
- 过采样与欠采样图像重采样(上采样下采样)
- ShareIntentUtil【调用系统自带的分享的工具类】
- Window SendMessage,PostMessage分析
- OSI七层模型的功能及协议
- 基础博弈论(NIm,威佐夫,巴什游戏)