【C++】std::queue 标准库队列的使用

在C++中,std::queue 是一个模板类,它提供了队列这种数据结构的实现,遵循先进先出(FIFO)的原则。

1. 定义队列

根据要存储的数据类型,你可以定义不同类型的队列。例如,如果要存储整数,可以这样定义:

#include <queue>int main() {std::queue<int> myQueue;
}

2. 插入元素

入队, 使用 push() 函数将元素添加到队列尾部:

   myQueue.push(10);myQueue.push(20);

3. 删除元素

出队,使用 pop() 函数删除并返回队列的头部元素。注意,这将改变队列的大小

   if (!myQueue.empty()) {int frontElement = myQueue.front();  // 获取但不删除队首元素myQueue.pop();                       // 删除队首元素}

4. 访问元素

  • front() 返回队列的第一个元素(队首)。
  • back() 返回队列的最后一个元素(队尾),但不删除。
  • empty() 检查队列是否为空。
  • size() 返回队列中元素的数量。

5. 示例

一个简单的完整示例,展示了如何创建、插入、访问和删除队列元素

   #include <iostream>#include <queue>int main() {std::queue<int> myQueue;// 插入元素for (int i = 1; i <= 5; ++i) {myQueue.push(i);}// 输出队列的大小std::cout << "Queue size: " << myQueue.size() << std::endl;// 访问并删除队首元素while (!myQueue.empty()) {std::cout << "Front element: " << myQueue.front() << std::endl;myQueue.pop();}return 0;}

6. 其他

  • 线程安全:如果在多线程环境中使用 std::queue,需要注意线程安全问题。默认的 std::queue 不提供线程安全保证,所以在并发访问时需要使用锁或其他同步机制,如 std::mutex 和 std::condition_variable。

  • 无锁队列:对于高性能的多线程应用,可以实现无锁队列以避免锁的开销。无锁队列通常使用原子操作(如 std::atomic)来确保线程安全,但实现起来比标准队列更复杂。

这些基本操作涵盖了 std::queue 的核心功能。根据实际需求,还可以结合其他容器和算法来扩展其功能。

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

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

相关文章

pywinauto,一款Win自动化利器!

pywinauto&#xff0c;一款Win自动化利器&#xff01; 1.安装 pywinauto是一个用于自动化Python模块&#xff0c;适合Windows系统的软件&#xff08;GUI&#xff09;&#xff0c;可以通过Pywinauto遍历窗口&#xff08;对话框&#xff09;和窗口里的控件&#xff0c;也可以控…

前端动态旋转地球背景

效果图 贴下源码 <template><div class"map-bg"><div class"canvas" id"canvs"></div><canvas class"canvasxk" id"canv"></canvas></div> </template><script setup …

RabbitMQ 如何使用延迟队列

RabbitMQ 如何使用延迟队列 目录 前置条件场景描述RabbitMQ 延迟队列机制实现步骤 1. 安装 RabbitMQ 延迟队列插件2. 创建延迟队列和交换机3. 发布延迟消息4. 消费延迟消息 示例代码 1. 延迟队列配置2. 发布消息的 Producer 代码3. 消费消息的 Consumer 代码 注意事项 前置条…

CSS怎样命名才能更好的理解

经常因为不知道怎么给css命名的小伙伴看过来 CSS命名方法对于维护可读性和易于理解的代码至关重要。这里有一个基于BEM&#xff08;Block Element Modifier&#xff09;的命名方法&#xff0c;它被广泛认为是提高CSS可维护性和可读性的有效方式&#xff1a; BEM&#xff08;B…

栈的实现与OJ括号匹配

今日备忘录: "不破不立. " 本文索引 1. 前言2. 顺序表与链表的区别3. 什么是栈4. 栈的实现5. OJ括号匹配6. 总结 1. 前言 人总是在坍塌中重建, 有些东西必须摧毁, 才能迎来新生, 不管是那些消耗你的人, 还是令你感到焦虑的事情, 还是一份你觉得毫无意义并且又不喜欢…

(车载)毫米波雷达信号处理中的恒虚警检测(CFAR)技术概述

说明 恒虚警检测(Constant False-Alarm Rate, CFAR)是雷达目标(信号)检测中很重要的一个概念&#xff0c;从事雷达相关科研或工程研发的或多或少应该都接触过。CFAR这项技术在工程实践上其实是比较简单的(至少在我了解的车载雷达领域)&#xff0c;不过这项技术也有很多可以深挖…

Ansys ACT的一个例子

由XML和IronPython文件组成&#xff0c;文件结构如下&#xff1a; ExtSample.xml <extension version"1" name"ExtSample1"><guid shortid"ExtSample1">2cc739d5-9011-400f-ab31-a59e36e5c595</guid><script src"sam…

10分钟了解Flink SQL使用

Flink 是一个流处理和批处理统一的大数据框架&#xff0c;专门为高吞吐量和低延迟而设计。开发者可以使用SQL进行流批统一处理&#xff0c;大大简化了数据处理的复杂性。本文将介绍Flink SQL的基本原理、使用方法、流批统一&#xff0c;并通过几个例子进行实践。 1、Flink SQL基…

【Linux】17. 进程间通信 --- 管道

1. 什么是进程间通信(进程间通信的目的) 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了…

Springboot自动装配源码分析

版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --> </par…

基于zhdate的Python公历、农历互算

zhdate 是公历、农历换算的python工具包。 生活中有时候需要计算跟农历和天数有关的日期&#xff0c;于是对zhdate进行了封装&#xff0c;实现了如下功能&#xff1a; 1 公历 -> 公历 : 天数 2 公历 -> 农历 : 天数 3 农历 -> 公历 : 天数 4 农历 -> 农历 …

第六十节 Java设计模式 - 过滤器/标准模式

Java设计模式 - 过滤器/标准模式 过滤器模式使用不同的条件过滤对象。 这些标准可以通过逻辑操作链接在一起。 过滤器模式是一种结构型模式。 例子 import java.util.List; import java.util.ArrayList;class Employee {private String name;private String gender;private…

决策树学习记录

对于一个决策树的决策面&#xff1a; 他其实是在任意两个特征基础上对于所有的点进行一个分类&#xff0c;并且展示出不同类别的之间的决策面&#xff0c;进而可以很清楚的看出在这两个特征上各个数据点种类的分布。 对于多输出的问题&#xff0c;在利用人的上半张脸来恢复下半…

ICode国际青少年编程竞赛- Python-4级训练场-复杂嵌套for循环

ICode国际青少年编程竞赛- Python-4级训练场-复杂嵌套for循环 1、 for i in range(4):Dev.step(i6)for j in range(3):Dev.turnLeft()Dev.step(2)2、 for i in range(4):Dev.step(i3)for j in range(4):Dev.step(2)Dev.turnRight()Dev.step(-i-3)Dev.turnRight()3、 for i …

产品经理考完NPDP后有必要考PMP吗?

NPDP由美国产品开发与管理协会&#xff08;PDMA&#xff09;所发起&#xff0c;是国际公认的唯一的新产品开发专业认证。而PMP则由PMI组织和出题&#xff0c;在项目管理领域较为权威。一个产品管理&#xff0c;一个项目管理&#xff0c;很多人考了NPDP之后&#xff0c;还会再考…

知识付费课程分销系统,网课平台哪个好?你知道几个平台呢?

疫情期间&#xff0c;教育行业受到了很大的冲击&#xff0c;很多线下机构转型线上&#xff0c;就连教师也都在家做上了直播课程&#xff0c;网课平台哪个好?你知道几个平台呢? 目前的线上教学平台有企业微信、腾讯视频会议、QQ视频电话、雨课堂、钉钉。 一、企业微信 1. 平台…

Windows关闭NGINX命令

1、首先用cmd进入NGINX的目录下,输入下面命令&#xff0c;查看nginx是否启动 tasklist /fi "imagename eq nginx.exe"2、关闭nginx taskkill /f /t /im nginx.exe3、启动&#xff1a;start nginx 4、重启&#xff1a;nginx -s reload

【牛客】SQL211 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

1、描述 有一个薪水表salaries简况如下&#xff1a; 请你获取薪水第二多的员工的emp_no以及其对应的薪水salary&#xff0c; 若有多个员工的薪水为第二多的薪水&#xff0c;则将对应的员工的emp_no和salary全部输出&#xff0c;并按emp_no升序排序。 2、题目建表 drop table …

ctfshow 源码审计 web301--web305

web301 在checklogin.php 发现了 $sql"select sds_password from sds_user where sds_username".$username." order by id limit 1;";在联合查询并不存在的数据时&#xff0c;联合查询就会构造一个虚拟的数据就相当于构造了一个虚拟账户&#xff0c;可以…

iOS 更改button文字和图片的位置

1.上代码&#xff1a; [self.selectAlbumButtonsetTitleEdgeInsets:UIEdgeInsetsMake(0, -36,0,0)]; [self.selectAlbumButtonsetImageEdgeInsets:UIEdgeInsetsMake(0,80,0,0)]; [self.selectCloudDiskButtonsetTitleEdgeInsets:UIEdgeInsetsMake(0, -36,0,0)]; [self.sele…