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

C++初阶——queue

一、什么是queue

        是一个容器适配器,专门设计用于在先进先出(FIFO,First In First Out)的上下文中操作。它是一个容器适配器,这意味着它不是一个完整的容器类,而是封装了一个特定的容器类(如list,deque等)作为其底层容器,并提供了一组特定的成员函数来访问其元素。

二、queue的定义及初始化

2.1queue的定义

#include<iostream>
#include<queue>
using namespace std;int main()
{queue<内置类型>q1; //定义一个储存数据类型为int的queue容器q1 queue<自定义类型>q2; //定义一个储存数据类型为结构体类型的queue容器q2return 0;
}

2.2queue的初始化

#include <iostream>
#include <queue>
#include <vector>
using namespace std;int main() {vector<int> v = { 1,2,4 };queue<int,vector<int>> q1(v);//用另一个容器进行初始化,第二个参数为用来初始化的容器类型
}

三、queue成员函数

3.1empty函数

bool empty() const;//函数原型

        返回队列是否为空:即其大小是否为零。这个成员函数实际上调用了底层容器对象的empty成员函数。

#include <queue>
#include <vector>
#include <iostream>
using namespace std;int main() {vector<int> v = { 1,2,4 };queue<int, vector<int>> q1(v);queue<int> q2;cout << q1.empty() << endl;//s1不为空,所以返回值为0cout << q2.empty() << endl;//s2是一个空队列,返回值是1
}

3.2size函数 

size_type size() const;

        返回队列中的元素数量。这个成员函数实际上调用了底层容器对象的size成员函数。

#include <queue>
#include <vector>
#include <iostream>
using namespace std;int main() {vector<int> v = { 1,2,4 };queue<int, vector<int>> q1(v);queue<int> q2;cout << q1.size() << endl;cout << q2.size() << endl;
}

3.3front函数和back函数

reference& front();
const_reference& front() const;reference& back();
const_reference& back() const;

        front函数实际上是调用了底层容器对象的front成员函数。queue通常使用deque作为其底层容器,但也可以是其他容器,如list。无论使用哪种底层容器,front函数都会调用该容器的front方法来获取队列前端的元素。back函数同理

#include <queue>
#include <vector>
#include <iostream>
using namespace std;int main() {vector<int> v = { 1,2,4 };queue<int, vector<int>> q1(v);cout << q1.front() << endl;cout << q1.back() << endl;
}

3.4push函数

void push (const value_type& val);
void push (value_type&& val);

        push函数用于在队列末尾插入一个新元,实际上是调用了底层容器对象的push_back成员函数。

#include <queue>
#include <vector>
#include <iostream>
using namespace std;int main() {vector<int> v = { 1,2,4 };queue<int, vector<int>> q1(v);q1.push(10);cout << q1.front() << endl;cout << q1.back() << endl;
}

3.5pop函数

void pop();

        pop函数将移除队列前端的一个元素,从而将队列的大小减少一。如果队列为空,pop操作可能会抛出一个异常,具体取决于底层容器的实现。

        vector中没有pop_front成员函数,所以可能会需要程序员手动使用erase成员函数实现pop_front函数。

#include <queue>
#include <iostream>
using namespace std;int main() {deque<int> d = { 1,2,4 };queue<int> q1(d);//queue底层默认是dequeq1.pop();cout << q1.front() << endl;cout << q1.back() << endl;
}

3.6emplace函数 

template <class... Args> void emplace (Args&&... args);

        如果你想要就地构造一个新元素而不是复制或移动现有元素,你可以使用emplace方法。emplace方法允许你传递构造新元素所需的参数,这些参数会被转发到底层容器emplace_back 方法,后者会在容器的末尾就地构造新元素。 

#include <stack>
#include <queue>
#include <iostream>
using namespace std;class A
{
public:int _a;int _b;A(int a = 0, int b = 0):_a(a), _b(b){}
};int main() {queue<A> q;A a;q.push(a);q.emplace(10, 10);cout << q.front()._a << endl;q.pop();cout << q.front()._a << endl;
}

3.7swap函数

void swap (queue& x) noexcept(/*see below*/);

        这里的注释/*see below*/指的是noexcept后面的表达式,它用于指定该函数是否可能抛出异常。在queue的swap成员函数中,这个表达式依赖于底层容器的swap函数是否可能抛出异常。

        swap函数交换两个queue对象的内容。这是通过交换底层容器实现的,因为queue是一个容器适配器,它不直接存储元素,而是依赖于一个底层容器。

#include <vector>
#include <queue>
#include <iostream>
using namespace std;int main() {vector<int> v1 = { 1,2,3 };vector<int> v2 = { 4,5,6 };queue<int, vector<int>> q1(v1);queue<int, vector<int>> q2(v2);cout << q1.front() << endl;cout << q2.front() << endl;q1.swap(q2);cout << q1.front() << endl;cout << q2.front() << endl;
}

        也可以用模板swap函数。

#include <vector>
#include <queue>
#include <iostream>
using namespace std;int main() {vector<int> v1 = { 1,2,3 };vector<int> v2 = { 4,5,6 };queue<int, vector<int>> q1(v1);queue<int, vector<int>> q2(v2);cout << q1.front() << endl;cout << q2.front() << endl;swap(q1,q2);cout << q1.front() << endl;cout << q2.front() << endl;
}

四、运算符重载

        queue提供的比较运算符重载会将比较操作委托给其底层容器对象。这意味着,当你比较两个queue对象时,实际上是在比较它们底层容器中存储的元素序列。这点与stack容器适配器是一样的。

相关文章:

C++初阶——queue

一、什么是queue 是一个容器适配器&#xff0c;专门设计用于在先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的上下文中操作。它是一个容器适配器&#xff0c;这意味着它不是一个完整的容器类&#xff0c;而是封装了一个特定的容器类&#xff08;如list…...

达梦数据库迁移j脚本

国产环境使用达梦数据库的越来越多&#xff0c;除了使用管理工具&#xff0c;还是可以使用脚本。 下面简单记录下&#xff0c;我在迁移中遇到的问题&#xff1a; 备份脚本 使用此脚本可以一次备份一个数据 backup_one_db.sh #!/bin/bashexport DB$1 export PASS<your_p…...

【Linux】内核调用栈打印函数dump_stack使用效果

init/main.c的start_kernel示例&#xff0c;这个调用栈不太深&#xff1a; /var/log/dmesg日志&#xff1a; [ 0.000000] kernel: [init/main.c start_kernel 911] start_kernel(void) [ 0.000000] kernel: [kernel/panic.c print_tainted 519 LOG_TIMES: 1 ] [ 0.…...

Uniapp踩坑input自动获取焦点ref动态获取实例不可用

前言 大家好我是没钱的君子下流坯&#xff0c;用自己的话解释自己的知识。很久很更新了&#xff0c;这几个月一直在加班&#xff0c;今天记录一个uniapp关于input中focus()方法自动获取焦点的坑。 案例 为了实现一个手机验证码的页面&#xff0c;验证码是五个输入框&#xf…...

数据分析-47-时间序列变点检测之离线历史数据的CPD

文章目录 1 时间序列结构1.1 变化点的定义1.2 结构变化的类型1.2.1 水平变化1.2.2 方差变化1.3 变点检测1.3.1 离线数据检测方法1.3.2 实时数据检测方法2 模拟数据2.1 模拟恒定方差数据2.2 模拟变化方差数据3 离线数据变点检测3.1 Ruptures模块3.2 恒定方差CPD3.3 变化方差CPD4…...

加入GitHub Spark需要申请

目录 加入GitHub Spark需要申请 GitHub Spark 一、产品定位与特点 二、核心组件与功能 三、支持的AI模型 四、应用场景与示例 五、未来展望 六、申请体验 加入GitHub Spark需要申请 GitHub Spark 是微软旗下GitHub在2024年10月30日的GitHub Universe大会上推出的一款革…...

生成式GPT商品推荐:精准满足用户需求

生成式GPT商品推荐&#xff1a;精准满足用户需求 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;电商平台正在逐步迎来一场前所未有的变革。尤其是生成式GPT&#xff08;Generative Pre-trained Transformer&#xff09;技术的应用&#xff0c;正在重新定…...

async 和 await的使用

一、需求 点击按钮处理重复提交&#xff0c;想要通过disabled的方式实现。 但是点击按钮调用的方法里有ajax、跳转、弹窗等一系列逻辑操作&#xff0c;需要等方法里流程都走完&#xff0c;再把disabled设为false&#xff0c;这样下次点击按钮时就可以继续走方法里的ajax等操作…...

Spring Cloud Vault快速入门Demo

1.什么是Spring Cloud Vault&#xff1f; Spring Cloud Vault 是 Spring Cloud 生态系统中的一个项目&#xff0c;旨在简化 Spring 应用程序与 HashiCorp Vault 的集成。它提供了一种方便的方式来管理和访问应用程序的敏感配置数据&#xff0c;如数据库凭证、API 密钥和其他机…...

道陟科技EMB产品开发进展与标准设计的建议|2024电动汽车智能底盘大会

11月12日&#xff0c;2024电动汽车智能底盘大会在重庆开幕。会议由中国汽车工程学会主办&#xff0c;电动汽车产业技术创新战略联盟、中国汽车工程学会智能底盘分会、智能绿色车辆与交通全国重点实验室承办。本届大会围绕电动汽车智能底盘相关技术发展与融合&#xff0c;满足高…...

GitHub Org

运营一个GitHub Org&#xff08;组织&#xff09;是一个复杂但充满价值的过程&#xff0c;它涉及多个方面&#xff0c;包括项目管理、团队协作、代码审查、文档维护、社区建设等。以下是一篇关于如何运营GitHub Org的详细指南&#xff0c;旨在帮助组织者更好地管理和维护其GitH…...

unity小:shaderGraph不规则涟漪、波纹效果

实现概述 在本项目中&#xff0c;我们通过结合 Sine、Polar Coordinates 和 Time 节点&#xff0c;实现了动态波纹效果。以下是实现细节&#xff1a; 核心实现 Sine 波形生成&#xff1a; 使用 Sine 节点生成基本的波形。该节点能够创建周期性变化&#xff0c;为波纹效果提供…...

【JavaScript】JavaScript开篇基础(6)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…...

Spark RDD、DStream、DataFrame、DataSet 在窗口操作上的区别

Spark RDD、DStream、DataFrame、DataSet 在窗口操作上的区别 1. Spark RDD 是否支持窗口操作&#xff1a; RDD 本身没有专门的窗口操作算子。原因&#xff1a; RDD 是一个弹性分布式数据集&#xff0c;设计为通用的、不可变的操作单元&#xff0c;主要用于批处理场景。窗口函…...

http自动发送请求工具(自动化测试http请求)

点击下载《http自动发送请求工具(自动化测试http请求)》 前言 在现代软件开发过程中&#xff0c;HTTP 请求的自动化测试是确保应用程序稳定性和可靠性的关键环节。为了满足这一需求&#xff0c;我开发了一款功能强大且易于使用的自动化 HTTP 请求发送工具。该工具基于 C# 开发…...

网络IP地址会经常换吗?深入解析与实操指南

在互联网的生态系统中&#xff0c;IP地址&#xff08;Internet Protocol Address&#xff09;是每台连接设备的唯一标识符&#xff0c;它在网络通信中起着至关重要的作用。然而&#xff0c;不少用户观察到自己的IP地址有时会发生变化&#xff0c;这引发了诸多疑问。本文旨在详细…...

MapLocNet由粗到细的定位网络

论文链接 MapLocNet: Coarse-to-Fine Feature Registration for Visual Re-Localization in Navigation Mapshttps://arxiv.org/html/2407.08561v1 问题背景 当前自动驾驶的定位主要依赖于高精度的地图和GPS信号&#xff0c;但在城市环境中&#xff0c;GPS信号易受到多路径传…...

【Docker】Mac安装Docker Desktop导致磁盘剩余空间较少问题如何解决?

目录 一、背景描述 二、解决办法 三、清理效果 四、理论参考 解决方法 1. 清理未使用的 Docker 镜像、容器和卷 2. 查看 Docker 使用的磁盘空间 3. 调整 Docker 的存储位置 4. 增加磁盘空间 5. 调整 Docker Desktop 配置 6. 使用 Docker 清理工具&#xff08;例如 D…...

构建客服知识库:企业效率提升的关键步骤

客服知识库是企业提升客户服务效率和质量的重要工具。它不仅帮助客服团队快速准确地回答客户问题&#xff0c;还能通过数据分析来优化服务流程和提升客户满意度。 1. 明确知识库的目标和范围 构建客服知识库的第一步是明确其目标和范围。这包括确定知识库的主要用户群体、需要…...

java-Day06 内部类 Lambda表达式 API

内部类 内部类:就是在一个类中定义一个类 格式例: public class Outer { public class Inner { } } 内部类分类 1.成员内部类(了解) 创建成员内部类 外部类.内部类 对象名new外部类().new内部类() 2.静态内部类(了解) 3.局部内部类(了解) 4.匿名内部类…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...