文章目录

  • 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菌】,个人已关注,并订阅了相关专栏(对我有帮助的),希望大家觉得不错的可以点赞、关注、收藏。

【跟学C++】C++队列——queue类(Study13)相关推荐

  1. 看动画学算法之:队列queue

    文章目录 简介 队列的实现 队列的数组实现 队列的动态数组实现 队列的链表实现 队列的时间复杂度 简介 队列Queue是一个非常常见的数据结构,所谓队列就是先进先出的序列结构. 想象一下我们日常的排队 ...

  2. oracle 删除 queue,C++ stl队列Queue用法介绍:删除,插入等操作代码举例

    c++队列queue模板类的定义在头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型. C++队列Queue是一种容 ...

  3. C++标准库类模板(stack)和 队列(queue)

    在C++标准库(STL)中有栈和队列的类模板,因此可以直接使用 1.栈(stack):使用栈之前,要先包含头文件 : #include<stack> stack.push(elem); / ...

  4. Java黑皮书课后题第10章:*10.10(Queue类)10.6节给出一个Stock类。设计一个名为Queue的类用于存储整数。像栈一样,队列保存元素。在栈中,元素后进先出。队列中元素先进先出

    10.10(Queue类)10.6节给出一个Stock类,设计一个名为Queue的类用于存储整数 题目 程序 破题 代码 Test10.java Test10_Queue.java UML 题目 程序 ...

  5. JS算法探险之队列(Queue)

    ❝ 乔布斯经常说到一句话:"Stay hungry, Stay foolish" 「Stay hungry」:永不满足, 「Stay foolish」: 是说埋头做自己的事,不要理 ...

  6. PYTHON——多线程:队列Queue数据结构

    1.队列模块简介 队列是一种数据结构,用于存放数据,类似列表.它是先进先出模式(FIFO模式),类似管道一般: 单线程不需要用到队列Queue,它主要用在多线程之间的,Queue称为多线程利器. 列表 ...

  7. 35 线程优先级队列(queue)

    Python的queue模块中提供了同步的.线程安全的队列类,包括先进先出队列Queue.后进先出队列LifoQueue和优先级队列PriorityQueue.这些队列都是先了锁原语,可以直接使用来实 ...

  8. python queue 查询是否在队列中_python队列Queue的详解

    Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...

  9. 多线程中的应用之队列(queue)

    队列queue 多应用在多线程中,对于多线程访问共享变量时,队列queue是线程安全的. 从queue队列的实现来看,队列使用了1个线程互斥锁(pthread.Lock()),以及3个条件标量(pth ...

最新文章

  1. 一分钟AI | 腾讯市值超5000亿美元创亚洲最高!CV杀红脸了:AI国家队云从科技完成25亿B轮融资
  2. 赠票 | 第三届语言与智能高峰论坛200个免费参会名额!
  3. ThinkSNS积分商城系统 一站式解决企业商城建站需求
  4. python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO
  5. war 发布后页面不更新_一文看懂tomcat8如何配置web页面管理
  6. 前端学习(1171):includes方法
  7. (转)令人无法理解的死锁案例分析
  8. 服务器响应速度是上行速度吗,服务器带宽与速度之间的关系
  9. 如何重命名Git标签?
  10. js,jquery小知识点
  11. 网页模板----01
  12. 粒子群优化算法matlab实现,粒子群优化算法的MATLAB程序实现+源程序
  13. Java后台获取Cookie
  14. WX系列无线漫游的配置
  15. JavaScript中的事件
  16. 过采样与欠采样图像重采样(上采样下采样)
  17. ShareIntentUtil【调用系统自带的分享的工具类】
  18. Window SendMessage,PostMessage分析
  19. OSI七层模型的功能及协议
  20. 基础博弈论(NIm,威佐夫,巴什游戏)

热门文章

  1. 通过Horizon Connection 下载Horizon Client(含UAG场景)
  2. qt实战技巧-数据可视化之COMTRATE格式解析(一)
  3. Oracle 数据库登录详解
  4. 关于加密传输,镭速加密传输解决方案
  5. 「计算机基础」栈结构
  6. L3-017 森森快递 (30 分)
  7. 微信小程序:checkbox调整大小
  8. 数据应用场景之标签管理体系
  9. 国内阿米巴经营落地的三大难点
  10. 西门子1200程序V15版本实例,设备已经运行生产,博图V15以上可打开 包含上位机通讯,modbus485