C++ queue类成员介绍

目录

🤔queue模板介绍:

🤔queue特点:

🤔queue内存图解:

🤔 queue的成员函数

🔍queue构造函数:

🔍queue赋值函数:

🔍queue判断函数:

🔍queue删除和添加函数:

🤔代码验证:

🤔运行结果:

🤔queue实际应用场景:

🤔结束!


🤔queue模板介绍:

queue(队列)是一种数据结构,它可以在一端插入元素,另一端弹出元素,并且按照元素被放入队列的顺序进行访问。在队列中插入元素的一端叫做队尾(rear),从队列中弹出元素的一端叫做队首(front)。队列的典型应用包括广度优先搜索缓存

在C++ STL中,队列实现为一个模板类,称为queue。它包含以下操作:

📖1. push(x):将元素x插入队列尾部。
📖2. pop():弹出队列头部元素。
📖3. front():返回队列头部元素。
📖4. back():返回队列尾部元素。
📖5. empty():检查队列是否为空。
📖6. size():返回队列中元素的数量。
📖7.emplace(x) :将元素x插入队列尾部。

🤔queue特点:

📖1.不支持迭代器:不可以用下标访问队列。

📖2.插入和删除:只允许从一端新增元素,从另一端移除元素。

📖3.访问操作:只有队头和队尾接受访问,其余数据不可访问。

C++17标准以后,queue模板新增函数emplace;它和push()的作用类似,都是将一个数据压入队尾,但是相比较于push来讲,emplace不需要创建一个临时对象,而是直接在容器内构造一个元素。相对于push()函数,我们需要先创建一个元素对象,然后将其复制到容器中或者移动到容器中,这将导致更多的开销,特别是在元素类型比较大或者包含不可复制/移动的对象时。

另外,emplace的高效性还得益于容器中可能的内部优化。对于某些容器(如vector),如果容器中没有足够的空间来存储新增的元素,容器可能会重新分配一块更大的内存,并将现有元素移动到新的内存中。在这样的情况下,使用emplace函数可以直接在新分配的内存中构造元素,而不需要先构造临时对象,再将其复制到新的内存中,这将节省大量的时间和空间。

当然,需要注意的是,对于某些简单类型的元素(如整数、浮点数等),由于它们的构造和复制开销比较小,因此emplacepush()在执行速度上的差异将比较小。但在任何情况下,使用emplace可以使代码更加简洁和高效。

🤔queue内存图解:

🤔 queue的成员函数

🔍queue构造函数:

📖1.默认构造函数:queue<T>que

queue<int> d;

📖2.拷贝构造函数:queue(const queue &que)       *此处是深拷贝,不共用地址

queue<int>d1(d);

🔍queue赋值函数:

📖1.重载等号运算符:queue &operator =(const queue &que)

queue<int>d2;
d2 = d;

🔍queue判断函数:

📖1.判断队列是否为空:empty()

q.empty();

📖2.返回队的大小:size()

q.size()

📖3.交换两个队列:swap()

d.swap();

🔍queue删除和添加函数:

📖1.向队尾添加元素:push()

d.push(i);

📖2.向队尾添加,任何时候比push更加高效:emplace()

d.emplace(999);

📖3.返回队尾元素:back()

d.back();

📖4.返回队头元素:front()

d.front();

🤔代码验证:

#include<iostream>#include<queue>
using namespace std;void print( queue<int>& q)
{cout << endl;cout << "队的大小为:";cout << q.size()<<endl;//利用判断队列是否为空来进行循环while (!q.empty()) {cout << q.front() << " ";q.pop(); // 删除队列头元素}cout << endl;cout << "队的大小为:";cout << q.size()<<endl;cout << endl;
}
void test01()
{//默认构造queue<int> d;for (int i = 0; i < 10; i++){d.push(i);}cout << "默认构造的结果为";print(d);//因为队列d已经被清空,我们需要再次进行入队操作for (int i = 0; i < 10; i++){d.push(i);}//拷贝构造函数(深拷贝)queue<int>d1(d);cout << "拷贝构造的结果为";print(d1);//赋值函数queue<int>d2;d2 = d;cout << "赋值函数的结果是:";print(d2);cout << "d的第一个元素为:";cout << d.front() << endl;cout << "d的最后一个元素为:";cout << d.back();//利用emplace添加元素d.emplace(999);print(d);
}
int main()
{test01();
}

🤔运行结果:

 🤔queue实际应用场景:

queue 模板常用于以下情况:

📖1. 宽度优先搜索:在算法中,queue 是广度优先搜索 (BFS) 的核心数据结构,用于存储待处理的节点和处理顺序。BFS 算法在社交网络、推荐系统、游戏 AI 等许多应用中都有着广泛的应用。

📖2. 消息队列:在计算机中,队列是消息传递系统的核心数据结构之一,用于在进程之间传输数据。常见的例子包括消息队列和事件循环系统。

📖3. 带有限制大小的缓存:在某些场景下,我们需要维护一个带有限制大小的缓存,当缓存满时,需要删除一些早期添加的数据。queue 模板提供了此类场景的完美解决方案

📖4. 多线程队列:在多线程编程中,queue 模板也被广泛使用,它可以用于协调不同线程之间的工作。比如,一个线程负责生产数据,将其压入队列中,另一个线程负责消费队列中的数据。通常,在多线程环境中使用 queue 模板需要使用线程安全的数据结构,例如 std::mutex 原子操作等。

📖综上所述,queue 模板作为一种线性数据结构,具有广泛的应用场景,特别是在需要按照先进先出 (FIFO) 或者后进先出 (LIFO) 条件访问数据的情况下。

🤔结束!

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

video标签学习 xgplayer视频播放器分段播放mp4

文章目录 学习链接目标video标签自带视频和制作的视频区别video标签的src属性本地视频文件前端代码播放效果 服务器视频文件示例1后端代码前端代码播放效果 示例2后端代码前端代码播放效果 示例3后端配置前端代码播放效果 video对象video对象创建和获取video的属性video的方法v…

spring cloud Alibaba之Nacos Discovery--服务治理 (二)

接着上一篇文章 搭建的微服务环境, 实现nacos 注册中心实战操作案例 一. 服务治理介绍 先来思考一个问题 通过上一章的操作&#xff0c;我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 &#xff08;ip&#xff0c;端口&#xff09;等硬编码到了代码中&a…

PHPMySQL基础(五):模拟登录后跳转+会话存储功能实现

PHP&MySQL基础&#xff08;一&#xff09;:创建数据库并通过PHP进行连接_长风沛雨的博客-CSDN博客 PHP&MySQL基础&#xff08;二&#xff09;:通过PHP对MySQL进行增、删、改、查_长风沛雨的博客-CSDN博客 PHP&MySQL基础&#xff08;三&#xff09;:处理查询SQL返…

excel用条件格式设置隔行变色

1、选中要设置隔行变色的区域 2、点击条件格式—>新建规则—>使用公式确定要设置格式额单元格 3、输入公式 mod(row(),2) 0&#xff0c;点击格式按钮&#xff0c;选择填充的颜色&#xff0c;点击确定。如下图所示&#xff1a; 4、在新建格式规则窗口中点击确定&#x…

Web|设置隔行变色的单元格

问题 表格在日常生活中使用的非常的多,比如excel就是专门用来创建表格的工具,表格就是用来表示一些格式化的数据的,比如:课程表、银行对账单。在网页中也可以来创建出不同的表格。在HTML中,使用table标签来创建一个表格,在table标签中使用tr来表示表格中的一行,有几行就…

Excel小技巧,隔行变色,多行变色

Excel小技巧&#xff0c;隔行变色&#xff0c;多行变色&#xff0c;间隔色&#xff0c;关键在于公式&#xff1a; mod(row(),x)y 其中x指期望的每隔&#xff08;x-1&#xff09;行变色&#xff0c;y等于每隔的第(y1)行&#xff1b; 比如&#xff1a;mod(row(),2)0 用来设置每…

[蓝桥杯/java/算法]A——隔行变色

&#x1f9d1;‍&#x1f393;个人介绍&#xff1a;大二软件生&#xff0c;现学JAVA、Linux、MySQL、算法 &#x1f4bb;博客主页&#xff1a;渡过晚枫渡过晚枫 &#x1f453;系列专栏&#xff1a;[编程神域 C语言]&#xff0c;[java/初学者]&#xff0c;[蓝桥杯] &#x1f4d6…

前端 | 设置隔行变色的单元格

欢迎点击「算法与编程之美」↑关注我们&#xff01; 本文首发于微信公众号&#xff1a;"算法与编程之美"&#xff0c;欢迎关注&#xff0c;及时了解更多此系列文章。 问题描述 表格在日常生活中使用的非常的多&#xff0c;比如excel就是专门用来创建表格的工具&#…

java中设置基偶隔行换色_excel2010如何设置隔行变色

在使用excel的过程中&#xff0c;一定见过别人编排的excel文档&#xff0c;隔行添加单元格背景颜色&#xff0c;也就是通常所说的隔行变色效果。下面就跟学习啦小编一起看看吧。 excel2010设置隔行变色的步骤 第一步&#xff0c;启动Excel2010&#xff0c;打开相应的工作簿文档…

python如何实现隔行换色_Excel2010如何实现隔行设置背景色

当Excel表格中的数据很多&#xff0c;很有可能会出现看错行的现象&#xff0c;为防止看错行&#xff0c;可以隔行设置背景色。可以通过套用表格格式或者条件格式来达到隔行变色的效果 方法一&#xff1a;通过套用表格格式 1、选中要处理的单元格或者列。 说明&#xff1a;选择列…

Excel 隔行变色

2019独角兽企业重金招聘Python工程师标准>>> 在日常办公Excel操作中&#xff0c;经过遇到需要将表格不同行或者不同列之间标记为不同的颜色来区分。如果只有少量可以直接进行操作&#xff0c;当数量较大时再一行一行或者一列一列操作就显得不够专业了。那么该如何快…

【测试基础01】

本期参考文献: 链接 一、安装mysql 1、安装mysql可以参考链接: 文章 2、安装mysql与python的工具 进行校验&#xff0c;查看是否安装成功 二、创建库 mycursor mydb.cursor() mycursor.execute("CREATE DATABASE ck") 执行语句创建库在mysql库里可以看到…

微信如何群删好友 微信群删好友的方法教程

微信作为如今的日常通讯软件&#xff0c;可以说是融入了生活中的方方面面&#xff0c;而有些人在使用过程中添加了很多好友&#xff0c;但对于一些不怎么熟悉的好友可以选择删除&#xff0c;不过要是好友太多一个一个删也很麻烦&#xff0c;那么&#xff0c;微信如何群删好友?…

终于!微信正式版群聊可折叠:满屏群信息成为历史

9月26日消息&#xff0c;微信今日发布了iOS端的8.0.14版本&#xff0c;微信群聊终于可折叠了。 小雷使用iPadOS上的微信进行了测试&#xff0c;在群聊界面的菜单中&#xff0c;会出现一个“折叠该群聊”的选项&#xff0c;勾选即可折叠该群聊。折叠后&#xff0c;“折叠的群聊”…

微信怎么找群聊?找回微信群聊只需要这样…

如今社会中的日常生活已经离不开微信&#xff0c;微信是社交界的一股清流&#xff0c;聊天、视频、语音等等功能&#xff0c;而且支付功能的用途范围在国内也甚是广泛。微信怎么找群聊&#xff1f;是的&#xff0c;当多个好友之间相互认识&#xff0c;或者都有一个共同点的时候…

【微信机器人】可做自动回复,自动接收转账,群聊机器人。

前言&#xff1a; 目前市面上的微信机器人项目少之又少&#xff0c;并且大多数的不可用。比如用抓取网页微信接口&#xff0c;但大多数人的账号没有使用网页微信的权限。又或者价格昂贵&#xff0c;如使用微信pad协议。于是便开发一个通过Hook微信的DLL文件&#xff0c;修改其…

半群与群

半群与独异点 半群与独异点的定义 定义11.1 (1)设V<S,>是代数系统,为二元运算,如果运算是可结合的,则称V为半群。    (2)设V<S,>是半群,若e∈S是关于运算的单位元,则称V是含幺半群,也叫做独异点。有时也将独异点V记作V<S,,e>. 例11.1 (1)<Z,&…

JS中手撕防抖函数和节流函数

1.防抖函数 1.1定义 说明&#xff1a;在一定时间内&#xff0c;频繁执行事件&#xff0c;只执行最后一次函数。(英雄联盟回城) 1.2步骤&#xff1a; 声明定时器函数判断是否有定时器函数&#xff0c;如果有定时器函数的话就清除定时器。。如果没有定时器函数的话&#xff0…

微服务Spring Cloud 02------使用Eureka实现注册中心(1)

1.Eureka简介 Eureka是Spring Cloud中的一个负责服务注册与发现的组件。遵循着CAP理论中的A(可用性)和P(分区容错性)。 Eureka是Netflix中的一个开源框架。它和 Zookeeper、Consul一样&#xff0c;都是用于服务注册管理的&#xff0c;同样&#xff0c;Spring-Cloud 还集成了Zo…

中台分类

大家好&#xff0c;我是易安&#xff0c;之前我们谈到过中台的概念&#xff0c;以及如何落地中台。今天我就带你一起看一看&#xff0c;行业常见的中台分类。 业务中台与数据中台 业务中台 业务这个词&#xff0c;其实是有些宽泛的&#xff0c;我听到很多人口中说的业务都不是…