【C++重点】deque

C++ queue 容器介绍

queue 是 C++ 标准库中的一个容器适配器,它实现了先进先出(FIFO)数据结构。即,元素按照插入的顺序排队,首先插入的元素最先出队。queue 适用于需要排队处理任务的场景,比如消息队列、任务调度等。

1. queue 的基本特性

  • 先进先出(FIFO)queue 实现了先进先出的特性。第一个进入队列的元素将会第一个被移除。
  • 容器适配器queue 不是一个独立的容器类,而是基于其他容器(通常是 dequelist)进行实现的容器适配器。
  • 操作简洁queue 提供了常见的队列操作,比如入队(push())、出队(pop())和访问队头元素(front())。

2. queue 的常见操作

2.1 构造与初始化

queue 默认使用 deque 容器作为底层实现,你也可以选择其他容器类型。

#include <iostream>
#include <queue>int main() {// 默认构造std::queue<int> q;// 初始化时加入元素std::queue<int> q2;q2.push(10);q2.push(20);q2.push(30);std::cout << "Queue initialized with elements: ";while (!q2.empty()) {std::cout << q2.front() << " ";q2.pop();}std::cout << std::endl;return 0;
}

2.2 入队操作(push()

你可以使用 push() 方法将元素加入队列的尾部。

std::queue<int> q;
q.push(1);
q.push(2);
q.push(3);

2.3 出队操作(pop()

pop() 方法移除队头元素,但并不会返回被移除的元素。如果你想访问出队的元素,需要先使用 front() 获取它。

std::queue<int> q;
q.push(1);
q.push(2);
q.push(3);// 移除队头元素
q.pop();
std::cout << "After pop, front element: " << q.front() << std::endl;  // 输出 2

2.4 访问队头元素(front()

front() 返回队头元素的引用。

std::queue<int> q;
q.push(1);
q.push(2);
q.push(3);std::cout << "Front element: " << q.front() << std::endl;  // 输出 1

2.5 访问队尾元素(back()

back() 返回队尾元素的引用。

std::queue<int> q;
q.push(1);
q.push(2);
q.push(3);std::cout << "Back element: " << q.back() << std::endl;  // 输出 3

2.6 检查队列是否为空(empty()

empty() 方法检查队列是否为空,返回一个布尔值。

std::queue<int> q;
if (q.empty()) {std::cout << "Queue is empty." << std::endl;
} else {std::cout << "Queue is not empty." << std::endl;
}

2.7 获取队列大小(size()

size() 方法返回队列中元素的数量。

std::queue<int> q;
q.push(1);
q.push(2);
q.push(3);std::cout << "Queue size: " << q.size() << std::endl;  // 输出 3

3. queue 的底层实现

queue 是一个容器适配器,默认情况下,它使用 deque(双端队列)作为底层容器。deque 提供了在两端高效插入和删除元素的能力,因此适合用于队列的实现。
可以通过显式指定底层容器类型来创建 queue。例如,使用 list 作为底层容器:

#include <iostream>
#include <queue>
#include <list>int main() {std::queue<int, std::list<int>> q;q.push(1);q.push(2);q.push(3);std::cout << "Front element: " << q.front() << std::endl;  // 输出 1return 0;
}

3.1 dequelist 作为底层容器的比较

  • deque:允许在队列两端快速插入和删除元素,且可以直接访问任意元素。deque 的队头和队尾操作非常高效,适合用于实现队列。
  • list:双向链表,虽然也能在两端进行高效的插入和删除操作,但不允许随机访问任何元素,因此性能上稍逊一筹。

4. queuepriority_queue 的区别

  • queue:实现了先进先出的原则,适用于任务按顺序处理的场景。
  • priority_queue:实现了优先级队列,可以根据优先级对元素进行排序。优先级队列中的元素不是按插入顺序处理,而是根据优先级处理。

4.1 priority_queue 示例

#include <iostream>
#include <queue>int main() {std::priority_queue<int> pq;pq.push(10);pq.push(5);pq.push(20);std::cout << "Top element in priority queue: " << pq.top() << std::endl;  // 输出 20pq.pop();std::cout << "Top element after pop: " << pq.top() << std::endl;  // 输出 10return 0;
}

需要优先处理元素时,可以考虑使用 priority_queue

#include <queue>
#include <iostream>int main() {std::queue<int> q;q.push(10);q.push(20);q.push(30);// 查看队列中的元素while (!q.empty()) {std::cout << q.front() << " ";q.pop();}return 0;
}

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

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

相关文章

透过 /proc 看见内核:Linux 虚拟文件系统与 systemd 初始化初探

当我们在终端中输入 ps、top、cat /proc/cpuinfo 等命令时&#xff0c;是否思考过这些信息来自哪里&#xff1f;为什么无需启动任何守护进程&#xff0c;就能实时读取系统负载、内存占用&#xff0c;甚至内核版本&#xff1f;这一切的答案&#xff0c;都藏在 Linux 系统中的一个…

操作系统(中断 异常 陷阱) ─── linux第28课

目录 1.硬件中断 2. 时钟中断 3. OS本质 4. 软件中断 缺页中断&#xff1f;内存碎片处理&#xff1f;除零野指针错误&#xff1f; 操作系统本质总结 操作系统是对软件硬件资源管理的软件 1.硬件中断 中断向量表(IDT)就是操作系统的⼀部分&#xff0c;启动就加载到内存中了…

文件分片上传

1前端 <inputtype"file"accept".mp4"ref"videoInput"change"handleVideoChange"style"display: none;">2生成hash // 根据整个文件的文件名和大小组合的字符串生成hash值&#xff0c;大概率确定文件的唯一性fhash(f…

机器学习的一百个概念(5)数据增强

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…

基于微信小程序的智慧乡村旅游服务平台【附源码】

基于微信小程序的智慧乡村旅游服务平台&#xff08;源码L文说明文档&#xff09; 目录 4系统设计 4.1系统功能设计 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 管理员模块的实现 5.1.1旅游景点管理…

数据驱动的智能BMS革新:机器学习赋能电池健康预测与安全协同优化

传统电池管理系统&#xff08;BMS&#xff09;依赖等效电路模型和固定参数算法&#xff0c;面临电化学机理复杂、老化行为非线性、多工况适应性差等瓶颈。例如&#xff0c;健康状态&#xff08;SOH&#xff09;和荷电状态&#xff08;SOC&#xff09;估算易受温度、循环次数及电…

使用JSON.stringify报错:Uncaught TypeError: cyclic object value

具体错误 Uncaught TypeError: cyclic object valueonMouseOver Amap.vue:125renderMarker Amap.vue:84emit maps:1emit maps:1ci maps:1ui maps:1fireEvent maps:1jL maps:1Xt maps:1T maps:1<anonymous> amap.vue:49promise callback*nextTick runtime-core.esm-bundl…

Spring Boot 工程创建详解

2025/4/2 向全栈工程师迈进&#xff01; 一、SpingBoot工程文件的创建 点击Project Structure 然后按着如下点击 最后选择Spring Boot &#xff0c;同时记得选择是Maven和jar&#xff0c;而不是war。因为Boot工程内置了Tomcat&#xff0c;所以不需要war。 紧接着选择Spring We…

Java 8 的流(Stream API)简介

Java 8 引入的 Stream API 是一个强大的工具&#xff0c;用于处理集合&#xff08;如 List、Set&#xff09;中的元素。它支持各种操作&#xff0c;包括过滤、排序、映射等&#xff0c;并且能够以声明式的方式表达复杂的查询操作。流操作可以是中间操作&#xff08;返回流以便进…

4. Flink SQL访问HiveCatalog

一. 实验环境 Flink版本: 1.19.1 Hive版本: 2.1.3 Hadoop版本: 3.2.4二. 操作步骤 1.上传所需的jar包到Flink lib目录下 [roothadoop3 ~]# mv flink-sql-connector-hive-3.1.3_2.12-1.19.1.jar /www/flink-1.19.1/lib [roothadoop3 ~]# mv hadoop-mapreduce-client-core-3.2…

虚拟试衣间-云尚衣橱小程序-衣橱管理实现

衣橱管理实现 目标 (Goal): 用户 (User): 能通过 UniApp 小程序上传衣服图片。 后端 (Backend): 接收图片,存到云存储,并将图片信息(URL、用户ID等)存入数据库。 用户 (User): 能在小程序里看到自己上传的所有衣服图片列表。 技术栈细化 (Refined Tech Stack for this Pha…

HAL库 通过USB Boot进行APP程序升级

硬件&#xff1a;stm32f407VET6芯片&#xff1b; 软件&#xff1a;STM32CubeMx、Keil5 上位机&#xff1a;Dfuse DemoV3.06 这里给出通过在Bootlaoder中使用USB方式来更新APP程序的方法&#xff0c;首先我们编写一个自己的bootloader&#xff0c;关于bootloader的大致原理可以…

数据库权限获取

1. into outfile&#xff08;手写&#xff09; 1.1. 利用条件 • web 目录具有写入权限&#xff0c;能够使用单引号 • 知道网站绝对路径&#xff08;根目录&#xff0c;或则是根目录往下的目录都行&#xff09; • secure_file_priv 没有具体值&#xff08;在 mysql/my.ini…

关于ESP系列MCU的UART download原理

GPIO0&#xff0c;即BOOT&#xff0c;工作模式选择&#xff1a; 悬空/拉高&#xff1a;正常MCU启动工作状态 下拉接地&#xff1a;UARTDownload下载模式 如何进入UARTDownload下载模式&#xff1f; 先按下boot按键不放&#xff0c;再按下rst按键 / en按键&#xff0c;随后释放…

无需安装Office进行 Word、Excel操作的微软开发库

微软的确有一些无需安装完整 Office 就能进行 Word、Excel 操作的开发库&#xff0c;以下为你介绍&#xff1a; 1. Microsoft Graph API 简介&#xff1a;Microsoft Graph API 是一个强大的 RESTful API&#xff0c;能让开发者通过调用接口访问 Office 365 服务里的各种资源&…

【一起来学kubernetes】34、ReplicaSet使用详解

Kubernetes ReplicaSet 使用详解 ReplicaSet 是 Kubernetes 中用于确保指定数量的 Pod 副本持续运行的核心控制器。它通过动态调整 Pod 副本数&#xff0c;保障应用的高可用性和弹性。以下是其核心功能、配置方法及最佳实践&#xff1a; 一、ReplicaSet 核心作用 维持 Pod 副本…

【力扣hot100题】(034)LRU缓存

做完这题已经没有任何力气写链表题了。 思路很简单&#xff0c;就是调试特别的痛苦。 老是频频报错&#xff0c;唉。 class LRUCache { public:struct ListNode{int key,val;ListNode* next; ListNode* prev;ListNode() : key(0), val(0), next(nullptr), prev(nullptr) {}L…

基于随机森林算法的信用风险评估项目

引言 这是一个基于随机森林算法的德国信用风险评估项目&#xff0c;主要目的是构建一个机器学习模型来评估德国客户的信用风险&#xff0c;判断客户是否为高风险客户。 # -*- coding: utf-8 -*- """ 德国信用风险评估随机森林模型 """ # 基础…

亚马逊云科技携手 DeepSeek:开启企业级生成式 AI 新征程

文章目录 一、DeepSeek-R1模型的技术突破&#xff08;一&#xff09;卓越的性能表现&#xff08;二&#xff09;独特的训练方法&#xff08;三&#xff09;丰富的模型生态 二、亚马逊云科技平台上的部署与优化&#xff08;一&#xff09;灵活的部署方式&#xff08;二&#xff…

Windows 实战-evtx 文件分析--笔记

Windows 取证之EVTX日志 - 蚁景网安实验室 - 博客园 一.evtx日志文件是什么 从 Windows NT 6.0&#xff08;也就是 Windows Vista 和 Windows Server 2008&#xff09;开始&#xff0c;微软引入了一种全新的日志文件格式&#xff0c;称为 evtx。这种格式取代了之前 Windows 系…