C++中的queue与priority_queue
文章目录
- queue
- queue的介绍
- queue的使用
- priority_queue
- priority_queue介绍
- priority_queue使用
queue
queue的介绍
队列是一种容器适配器,专门用于上下文先进先出的操作中。队列的特性是先进先出,从容器的一端插入,另一端提取元素。
队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。
底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:empty(检测队列是否为空)、size(返回队列中有效元素的个数)、front(返回队头元素的引用)、back(返回队尾元素的引用)、push_back(在队列尾部插入元素)、pop_front(在队列头部删除元素)。
标准容器类deque和list满足了这些要求。默认请情况下,如果没有为queue实例化指定底层容器类,则默认使用标准容器deque。
queue的使用
函数声明 | 接口说明 |
---|---|
queue() | 构造空的队列 |
empty() | 检测队列是否为空,为空就返回true,否则就返回false |
size() | 返回队列中有效元素的个数 |
front() | 返回队头元素的引用 |
back() | 返回队尾元素的引用 |
push() | 在队尾将元素val插入队列 |
pop() | 将队头元素弹出队列 |
int main()
{deque<int> mydeck(3, 100);list<int> mylist(2, 200);queue<int> first;queue<int> second(mydeck);queue<int, list<int>> third;queue<int, list<int>> fourth(mylist);return 0;
}
int main()
{queue<int> myqueue;int sum(0);cout << myqueue.empty() << endl;for (int i = 1; i <= 10; i++)myqueue.push(i);cout << myqueue.empty() << endl;while (!myqueue.empty()){sum += myqueue.front();myqueue.pop();}cout << "total:" << sum << endl;return 0;
}
int main()
{queue<int> myints;cout << "0.size:" << myints.size() << endl;for (int i = 0; i < 5; i++)myints.push(i);cout << "1.size:" << myints.size() << endl;myints.pop();cout << "2.size:" << myints.size() << endl;return 0;
}
int main()
{queue<int> myqueue;myqueue.push(10);myqueue.push(20);myqueue.front() -= myqueue.back();cout << "myqueue.front():" << myqueue.front() << endl;myqueue.back() += myqueue.front();cout << "myqueue.back():" << myqueue.back() << endl;return 0;
}
在C++11中,stack的成员函数也新增了emplace和swap。
priority_queue
priority_queue介绍
优先队列是一种容器适配器,根绝严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。可以当做堆来理解,实际上和堆基本一致。在堆中可以随时插入元素,并且智能检索最大的堆元素(优先队列中位于顶部的元素)。
优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类。priority_queue提供一组特定的成员函数来访问其元素。元素从特定容器的尾部被抛出,其称为有限队列的顶部。
底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过迭代器访问,并支持以下操作:empty(检测容器是否为空)、size(返回容器中有效元素的个数)、front(返回容器中第一个元素的引用)、push_back(在容器尾部插入元素)、pop_back(删除容器尾部的元素)。需要注意的是,这些操作是priority_queue必须具备的,并非是只能有这些操作。
标准容器类vector和deque满足这些需求。默认情况下,如果没有为特定的priority_queue类实例化指定容器类,则使用vector。
需要支持随机访问迭代器,以便始终在内部保持堆结构。容器适配器通过在需要时自动调用算法函数make_heap、push_heap和pop_heap来自动完成此操作。
优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的地方,都可以考虑使用priority_queue。默认情况下priority_queue是大堆。
priority_queue使用
函数声明 | 接口说明 |
---|---|
priority_queue()/priority_queue(first, last) | 构造一个优先级队列 |
empty() | 检测优先级队列是否为空,为空就返回true,否则就返回false |
size() | 返回优先队列中有效元素的个数 |
top() | 返回优先级队列中最大(最小元素),即堆顶元素 |
push() | 在优先级队列中插入元素 |
pop() | 删除优先级队列中的最大(最小)元素,即堆顶元素 |
class mycomparison
{bool reverse;
public:mycomparison(const bool& revparam = false){reverse = revparam;}bool operator() (const int& lhs, const int& rhs) const{if (reverse)return (lhs > rhs);elsereturn (lhs < rhs);}
};int main()
{int myints[] = { 10, 60, 50, 20 };priority_queue<int> first;priority_queue<int> second(myints, myints + 4);priority_queue<int, vector<int>, greater<int>> third(myints, myints + 4);typedef priority_queue<int, vector<int>, mycomparison> mypq_type;mypq_type fourth;mypq_type fifth(mycomparison(true));return 0;
}
int main()
{priority_queue<int> mypq;int sum(0);for (int i = 0; i < 10; i++)mypq.push(i);cout << "mypq size:" << mypq.size() << endl;cout << "mypq top:" << mypq.top() << endl;while (!mypq.empty()){sum += mypq.top();mypq.pop();}cout << "total:" << sum << endl;return 0;
}
相关文章:

C++中的queue与priority_queue
文章目录 queuequeue的介绍queue的使用 priority_queuepriority_queue介绍priority_queue使用 queue queue的介绍 队列是一种容器适配器,专门用于上下文先进先出的操作中。队列的特性是先进先出,从容器的一端插入,另一端提取元素。 队列…...

电脑发挥极致,畅游永恒之塔sf
随着22寸显示器的普及,玩永恒之塔势必会对显示卡造成了很大负担。不要说效果全开,就连简洁的玩,都成了问题,那是不是就要重金把才买的显示卡又要拿掉呢? 最出众的解决办法,是超频。 主要就具有以下条件最佳…...

ChatGPT :十几个国内免费可用 ChatGPT 网页版
前言 ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程序 ,于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言…...

5 分钟教你如何免费用上 GPT-4
今天要分享的就是普通用户,没有 OpenAI 账号,不需要写代码,你依然可以免费体验 GPT-4,当然,会有一些缺点,本篇文章将会手把手教你怎么用上免费版的 GPT-4 以及它的一些限制。 第一步:打开 Stea…...

安卓手机搭建智能语音客服/通话播音/聊天播音乐技术实现
声明,此项技术需要root支持,如果因为刷机导致手机变砖或其他不可预料的后果请自行解决。 场景 我有一个朋友他是做业务的,主要还是做电销,其实电销相对于以前纪念没那么好做了(我自己觉得主要是互联网冲击,…...

【学习笔记】PKUSC2023 不知道咋记
挺快乐的。到 P K U PKU PKU感受了一下北大校园,其实并没有想像中那么令人惊艳,但是看到了许多亲切的学长以及他们的热心陪伴(虽然有的我甚至不认识),感觉心里还是挺暖的。 如果不算上 D 2 T 1 D2T1 D2T1被平衡树板子…...

Packet Tracer - 配置基于区域的策略防火墙 (ZPF)
Packet Tracer - 配置基于区域的策略防火墙 (ZPF) 拓扑图 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 交换机端口 R1 G0/1 192.168.1.1 255.255.255.0 不适用 S1 F0/5 S0/0/0 (DCE) 10.1.1.1 255.255.255.252 不适用 不适用 R2 S0/0/0 10.1.1.2 255…...

全方位揭秘!大数据从0到1的完美落地之运行流程和分片机制
一个完整的MapReduce程序在分布式运行时有三类实例进程: MRAppMaster: 负责整个程序的过程调度及状态协调MapTask: 负责Map阶段的整个数据处理流程ReduceTask: 负责Reduce阶段的整个数据处理流程 当一个作业提交后(mr程序启动),大概流程如下࿱…...

后端程序员的前端必备【Vue】 - 07 ES6新语法
ES6新语法 1 let定义变量2 const定义常量3 模板字符串4 方法默认值5 箭头函数6 解构6.1 对象解构6.2 数组解构6.2 使用解构实现变量交换 7 Spread Operator8 模块化编程 1 let定义变量 使用let定义变量能更加精准的确定变量的作用域 //for(var i 0 ; i < 10 ; i){} for(let…...

AI落地:程序员如何用AI?
对于程序员来说,真正能提高效率、可落地的AI应用场景都有哪些? 目前已经能切实落地,融入我日常工作生活的有以下几个场景: 开发工作:自然语言生成代码,自动补全代码 日常工作学习:写作、翻译、…...

掌握优化+创新模式,轻松提升APP广告eCPM
无论是市场占有率高的综合性应用程序(App),还是透过特定目的所设计的专业化应用程序(App),内部嵌入广告已成为其主要的盈利方式。 而优化和创新作为提升广告收益的两大关键词。通过不断的数据分析和优化,结合对用户需求的深刻理解去优化和…...

在docker上安装运行Python文件
目录 一、在docker中安装python 1.1 输入镜像拉取命令 1.2 查看镜像 1.3 运行 1.4 查看是否成功 1.5 查看python版本 二、运行py文件 2.1准备运行所需文件 2.2 准备文件夹 2.3 大概是这幅模样 2.4 打包上传到服务器上 2.5 构建镜像示例 2.6 查看镜像 2.7 优化镜像的…...

RocketMQ第三节(生产者和消费者)
目录 1:生产者(同步、异步、单向) 1.1:同步发送消息(每发送一条等待mq返回值) 1.2:异步发送消息 1.3:单向发送消息(不管成功失败,只管发送消息)…...

人大金仓亮相国际金融展,打造“金融+产业+生态”创新模式
4月27日,以“荟萃金融科技成果,展现数字金融力量,谱写金融服务中国式现代化新篇章”为主题的2023中国国际金融展圆满落幕。作为已经举办30年的行业盛会,人大金仓再一次重磅亮相,全方位展示国产数据库前沿应用和创新服务…...

Syslog-ng RHEL 的安装和配置
syslog-ng 作为 syslog 的替代工具,可以完全替代 syslog 的服务,并且通过定义规则,实现更好的过滤功能。 作为运维来说一个好的日志工具比什么都重要。 通常我们会管理不同的服务器,因此我们需要把日志集中一下以便于快速查找。…...

得物直播低延迟探索 | 得物技术
1.背景 直播的时效性保证了良好的用户体验,根据经验在交易环节,延迟越低转化效果也会越好。传统的直播延迟问题已经成为了一个不容忽视的问题,高延迟不仅破坏了用户的观看体验,也让主播难以实时获取到用户的反馈。为了进一步优化…...

【CVPR红外小目标检测】红外小目标检测中的非对称上下文调制(ACM)
论文题目: Asymmetric Contextual Modulation for Infrared Small Target Detection 红外小目标检测中的非对称上下文调制 红外小目标数据集 目标个数分布:约90%图片中只有一个目标,约10%图片有多个目标(在稀疏/显著的方法中&am…...

Axios概述
一、Json-server 获得零编码的完整伪造 REST API zero coding 在不到 30 秒的时间内 (认真)。 使用 <3 创建,适用于需要快速后端进行原型设计和模拟的前端开发人员,模拟后端发送过来json数据。 1.安装 npm install -g jso…...

用右雅克比对旋转矩阵进行求导
考虑一个向量 a \bold{a} a对其进行旋转, 旋转用旋转矩阵 R \bold{R} R表示, 用朴素的倒数定义进行求导而不是用扰动模型, 我得到了这个过程与结果 和高博的新书结果 − R J r a ∧ -\bold{R}\bold{J}_{r}\bold{a}^{\wedge} −RJra∧结果不一样, 雅克比矩阵位置不同, 是不是…...

高性能HMI 走向扁平化
个人计算机作为图形用户界面(GUI)在自动化中已经使用了30多年。在那段时间里,从技术、术语、功能到用于创建接口的标准和指南,发生了许多变化。 PC 技术的飞速发展,特别是图形显示,用户界面的技术发展导致了…...

虚幻引擎配置物体水面浮力的简便方法
虚幻引擎配置物体水面浮力的简便方法 目录 虚幻引擎配置物体水面浮力的简便方法前言前期工作配置水面浮力针对一个立方体的水面浮力配置针对船3D模型的水面浮力配置 小结 前言 在使用虚幻引擎配置导入的3D模型时,如何快速地将水面浮力配置正确,从而使得…...

WatchGuard 防火墙策略、配置和日志分析器
获取 Internet 活动见解并及时了解安全事件是一项具有挑战性的任务,因为安全设备会生成大量的安全和流量日志。Firewall Analyzer 针对 WatchGuard 防火墙设备的报告功能具有一系列功能,使您能够增强网络安全。WatchGuard 日志分析器软件,可让…...

Web自动化测试——XAPTH高级定位
XAPTH高级定位 一、xpath 基本概念二、xpath 使用场景三、xpath 相对定位的优点四、xpath 定位的调试方法五、xpath 基础语法(包含关系)六、xpath 顺序关系(索引)七、xpath 高级用法1、[last()]: 选取最后一个2、[属性名属性值 an…...

CentOS 7 安装 Nginx
前言 最近,在公司经常会进行项目的部署,但是服务器环境都是导师已经搭建好了的,我就是将项目文件放到特定目录。于是,周末在家就进行了 Nginx 的安装学习。之前,在 Windows 上使用过 Nginx,但是在 Linux 环…...

Databend 开源周报第 91 期
Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 新数据类型&…...

【Ubuntu18.04使用yolov5教程】
欢迎大家阅读2345VOR的博客【Ubuntu18.04使用yolov5教程】🥳🥳🥳2345VOR鹏鹏主页: 已获得CSDN《嵌入式领域优质创作者》称号👻👻👻,座右铭:脚踏实地,仰望星空…...

CocoaPods如何发布新版本的Pod Library
当我们修改了一个Pod Library中的代码时,如何让依赖该库的项目能更新到最新代码,步骤如下: 假设现在修改了SamplePod(Pod名称)的代码,希望将最新版本更新到1.0.1,目前版本是1.0.0 修改SamplePo…...

v4l2框架
v4l2框架 文章目录 v4l2框架框架1.硬件相关层uvc_probeuvc_register_chainsuvc_register_termsuvc_register_video 2.核心层__video_register_device 3.虚拟视频驱动vivid分析入口vivid_init注册vivid平台驱动vivid_probevivid_create_instance 框架 1.硬件相关层 driver/medi…...

vue项目中生成LICENSE文件
vue项目中生成LICENSE文件 简介 LICENSE 文件是一个文本文件,它包含了你的项目所使用的开源软件的许可证信息。 在开发过程中,我们经常会使用到各种各样的第三方开源软件,这些软件是有版权和许可证的,我们在使用时需要遵循它们的…...

NewBing最新更新使用体验(无需等待人人可用)
NewBing最新更新使用体验 微软Bing爆炸级更新!无需等待人人可用! 今天,微软突然官宣全面开放BingChat: 无需任何等待。只需注册一个账户,首页即可体验。 NewBing最新更新新特性官方文档 https://www.microsoft.com/en-…...