当前位置: 首页 > news >正文

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的介绍 队列是一种容器适配器&#xff0c;专门用于上下文先进先出的操作中。队列的特性是先进先出&#xff0c;从容器的一端插入&#xff0c;另一端提取元素。   队列…...

电脑发挥极致,畅游永恒之塔sf

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

ChatGPT :十几个国内免费可用 ChatGPT 网页版

前言 ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国OpenAI 研发的聊天机器人程序 &#xff0c;于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过理解和学习人类的语言…...

5 分钟教你如何免费用上 GPT-4

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

安卓手机搭建智能语音客服/通话播音/聊天播音乐技术实现

声明&#xff0c;此项技术需要root支持&#xff0c;如果因为刷机导致手机变砖或其他不可预料的后果请自行解决。 场景 我有一个朋友他是做业务的&#xff0c;主要还是做电销&#xff0c;其实电销相对于以前纪念没那么好做了&#xff08;我自己觉得主要是互联网冲击&#xff0c…...

【学习笔记】PKUSC2023 不知道咋记

挺快乐的。到 P K U PKU PKU感受了一下北大校园&#xff0c;其实并没有想像中那么令人惊艳&#xff0c;但是看到了许多亲切的学长以及他们的热心陪伴&#xff08;虽然有的我甚至不认识&#xff09;&#xff0c;感觉心里还是挺暖的。 如果不算上 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程序在分布式运行时有三类实例进程&#xff1a; MRAppMaster: 负责整个程序的过程调度及状态协调MapTask: 负责Map阶段的整个数据处理流程ReduceTask: 负责Reduce阶段的整个数据处理流程 当一个作业提交后(mr程序启动)&#xff0c;大概流程如下&#xff1…...

后端程序员的前端必备【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?

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

掌握优化+创新模式,轻松提升APP广告eCPM

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

在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&#xff1a;生产者&#xff08;同步、异步、单向&#xff09; 1.1&#xff1a;同步发送消息&#xff08;每发送一条等待mq返回值&#xff09; 1.2&#xff1a;异步发送消息 1.3&#xff1a;单向发送消息&#xff08;不管成功失败&#xff0c;只管发送消息&#xff09…...

人大金仓亮相国际金融展,打造“金融+产业+生态”创新模式

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

Syslog-ng RHEL 的安装和配置

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

得物直播低延迟探索 | 得物技术

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

【CVPR红外小目标检测】红外小目标检测中的非对称上下文调制(ACM)

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

Axios概述

一、Json-server 获得零编码的完整伪造 REST API zero coding 在不到 30 秒的时间内 &#xff08;认真&#xff09;。 使用 <3 创建&#xff0c;适用于需要快速后端进行原型设计和模拟的前端开发人员&#xff0c;模拟后端发送过来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} −RJr​a∧结果不一样, 雅克比矩阵位置不同, 是不是…...

高性能HMI 走向扁平化

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

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...