Day 25 C++ queue 容器(队列)

文章目录

  • queue 基本概念
      • 定义
      • 注意
      • 基本概念
          • 队头(Front)——指向队列中最早添加的元素的位置。
          • 队尾(Rear)——指向队列中最后添加的元素的位置。
          • 入队(Enqueue)——将元素添加到队尾。
          • 出队(Dequeue)——从队头移除元素。
          • 队空(Empty)——当队列中没有任何元素时,称为队空。
          • 队大小(Size)——表示队列中元素的数量。
  • queue 常用接口
      • 构造函数
      • 赋值操作
      • 数据存取
      • 大小操作
  • 示例
      • 代码
      • 分析
      • 总结
  • queue 应用场景
      • 任务调度
      • 消息传递
      • 缓冲区
      • 网络请求处理
      • 线程池任务调度

queue 基本概念

定义

在C++中,队列(queue)是一种常见的数据结构,采用先进先出(First-In-First-Out,FIFO)的原则,它有两个出口。队列的特点是只允许在一端进行插入操作(队尾),在另一端进行删除操作(队头)。在队列中,只有最早添加的元素可以被访问和操作,而后续添加的元素需要等到前面的元素被处理完毕后才能被访问。

在这里插入图片描述

注意

在C++标准库中,可以使用std::queue模板类来实现队列。需要引入头文件<queue>
队列容器允许从一端新增元素,从另一端移除元素
队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为

C++标准库中的队列(std::queue本身不提供直接的索引功能。由于队列是一种先进先出的数据结构,它的插入操作只能在队尾进行,删除操作只能在队头进行,不能像数组或向量那样通过索引来访问元素。
要实现带有索引功能的队列,可以使用其他数据结构来辅助实现,如向量(std::vector)或链表(std::list

基本概念

队头(Front)——指向队列中最早添加的元素的位置。
队尾(Rear)——指向队列中最后添加的元素的位置。
入队(Enqueue)——将元素添加到队尾。
出队(Dequeue)——从队头移除元素。
队空(Empty)——当队列中没有任何元素时,称为队空。
队大小(Size)——表示队列中元素的数量。

queue 常用接口

构造函数

  • queue<T> que; queue采用模板类实现,queue对象的默认构造形式
  • queue(const queue &que); 拷贝构造函数

赋值操作

  • queue& operator=(const queue &que); 重载等号操作符

数据存取

  • push(elem); 往队尾添加元素
  • pop(); 从队头移除第一个元素
  • back(); 返回最后一个元素
  • front(); 返回第一个元素

大小操作

  • empty(); 判断堆栈是否为空
  • size(); 返回栈的大小

示例

代码

#include <iostream>
#include <queue>

int main() {
    std::queue<int> que;
    
    // 往队尾添加元素
    que.push(10);
    que.push(20);
    que.push(30);

    // 返回第一个元素
    std::cout << "队头元素为:" << que.front() << std::endl;

    // 返回最后一个元素
    std::cout << "队尾元素为:" << que.back() << std::endl;

    // 移除第一个元素
    que.pop();

    // 再次返回第一个元素
    std::cout << "队头元素为:" << que.front() << std::endl;

    // 获取队列的大小
    std::cout << "队列的大小为:" << que.size() << std::endl;

    // 判断队列是否为空
    if (que.empty()) {
        std::cout << "队列为空" << std::endl;
    }
    return 0;
}

运行结果如下:

队头元素为:10
队尾元素为:30
队头元素为:20
队列的大小为:2

分析

这个例子创建了一个整型的队列对象std::queue que
然后通过push(elem)方法往队列的队尾依次添加元素10、20和30
使用front()方法可以获取队列的第一个元素的值
使用back()方法可以获取队列的最后一个元素的值
然后使用pop()方法移除队列的第一个元素
最后使用size()方法返回队列的大小
使用empty()方法判断队列是否为空。

总结

  • 入队 — push
  • 出队 — pop
  • 返回队头元素 — front
  • 返回队尾元素 — back
  • 判断队是否为空 — empty
  • 返回队列大小 — size

queue 应用场景

任务调度

在多任务系统中,可以使用队列来管理待执行的任务。当新的任务到达时,将其加入队列末尾;执行任务时,从队列头部取出任务进行处理。这样可以按照任务的到达顺序依次执行,并保证公平性。

消息传递

在消息队列系统中,可以使用队列来传递消息。生产者将消息放入队列尾部,消费者从队列头部取出消息进行处理。这样可以实现异步通信,提高系统的可伸缩性和可靠性。

缓冲区

在数据处理过程中,可以使用队列作为缓冲区来平衡生产者和消费者之间的速度差异。生产者可以将数据放入队列,而消费者则从队列中取出数据进行处理。这样可以避免生产者和消费者直接交互,提高系统的性能和稳定性。

网络请求处理

在服务器端应用程序中,可以使用队列来处理客户端的请求。当有新的请求到达时,将其放入队列尾部,然后按照队列的顺序依次处理。这样可以避免同时处理大量请求导致系统负载过高,同时提高系统的响应速度。

线程池任务调度

在多线程编程中,可以使用队列来管理待执行的任务。将任务放入队列尾部,由线程池中的线程从队列头部取出任务进行执行。这样可以避免线程过多导致资源竞争和性能下降,实现任务的有序执行。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TCP三次握手四次断开

一、了解TCP &#x1f345;TCP &#xff1a;传输控制协议&#xff0c;是一种面向连接的可靠的传输协议。 什么是可靠的传输协议&#xff1f;如何保障可靠传输&#xff1f; 保证可靠性&#xff1a; 1.确认机制 2.重传输机制什么是面向连接&#xff1f;如何保障面…

zookeeper --- 高级篇

一、zookeeper 事件监听机制 1.1、watcher概念 zookeeper提供了数据的发布/订阅功能&#xff0c;多个订阅者可同时监听某一特定主题对象&#xff0c;当该主题对象的自身状态发生变化时(例如节点内容改变、节点下的子节点列表改变等)&#xff0c;会实时、主动通知所有订阅者 …

模仿火星科技 基于cesium+角度测量+高度测量+可编辑

1. 创建提示窗&#xff1a; 启动Cesium应用&#xff0c;地图场景将打开&#xff0c;欢迎您进入编辑模式。 在屏幕的一角&#xff0c;一个友好的提示窗将呈现&#xff0c;随着您的操作&#xff0c;它会为您提供有用的信息和指导。 2. 绘制面积&#xff1a; 轻轻点击鼠标左键&a…

mac安装open3d时候出现错误

在测试open3d是否正常顺利安装时&#xff0c;出现了如下错误&#xff1a; python -c "import open3d as o3d; print(o3d.__version__)" Traceback (most recent call last):File "<string>", line 1, in <module>File "/Users/huangzhe/…

解决selenium的“can‘t access dead object”错误

目录 问题描述 原因 解决方法 示例代码 资料获取方法 问题描述 在python执行过程中&#xff0c;提示selenium.common.exceptions.WebDriverException: Message: TypeError: cant access dead object 原因 原因是代码中用到了frame,获取元素前需要切换到frame才能定位到…

分析一下vue3下会造成响应式丢失的情况

前言 在我们从vue2过渡到vue3的时候&#xff0c;对于数据响应式的变化其实是懵懵懂懂的。从以往直接在data函数里面定义变量到每一次都要使用ref/reactive时&#xff0c;是有些不适应的。但问题不大&#xff0c;毕竟在大前端时代中&#xff0c;如果不及时跟上时代的步伐&#…

动手吧,vue移动端消息滚动组件

先看效果图&#xff1a; 1、模板部分 <transition name"fade-sport"><div class"v-message-roll" v-show"visible"><svg class"v-icon" viewBox"0 0 1024 1024" version"1.1" xmlns"http://…

上传图片视频

分布式文件系统MinIo MinIO提供多个语言版本SDK的支持&#xff0c;下边找到java版本的文档&#xff1a; 地址&#xff1a;https://docs.min.io/docs/java-client-quickstart-guide.html MinIO测试&#xff08;上传、删除、下载&#xff09; public class MinioTest {MinioC…

【数据结构刷题】数组oj

前言:本文章是关于在力扣上面的数组相关面试题的讲解&#xff0c;包括:1.原地移除数组中所有的元素val&#xff0c;要求时间复杂度为O(N)&#xff0c;空间复杂度为O(1),2.删除排序数组中的重复项。3. 合并两个有序数组。一.原地移除数组中所有的元素val 题目: https://leetcod…

狂码三万字 | 三维场景点云理解与重建技术

目录 00 引言 01 点云特征提取与匹配 1.1 传统点云特征提取 1.2 点云深度学习 1.3 点云卷积 1.4 稀疏卷积 1.5 点云Transformer 1.6 点云旋转不变特征提取 1.7 点云匹配 02 场景点云语义分割 2.1 场景表征与数据集 2.1.1 室内场景表征与相关数据集 2.1.2 室外场…

电脑IP地址错误无法上网怎么办?

电脑出现IP地址错误后就将无法连接网络&#xff0c;从而无法正常访问互联网。那么当电脑出现IP地址错误时该怎么办呢&#xff1f; 确认是否禁用本地连接 你需要先确定是否禁用了本地网络连接&#xff0c;如果发现禁用&#xff0c;则将其启用即可。 启用方法&#xff1a;点击桌…

pytest-xdist分布式测试原理浅析

目录 pytest-xdist执行流程&#xff1a; pytest-xdist 模块结构&#xff1a; pytest-xdist分布式测试原理&#xff1a; pytest-xdist源码浅读&#xff1a; pytest-xdist执行流程&#xff1a; 解析命令行参数&#xff1a;pytest-xdist 会解析命令行参数&#xff0c;获取用户…

DROP USER c##xyt CASCADE > ORA-01940: 无法删除当前连接的用户

多创建了一个用户&#xff0c;想要给它删除掉 一 上执行过程&#xff0c;确实删除成功了 Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing optionsSQL> DR…

CVPR 2023 | Attention-Based Point Cloud Edge Sampling

注1:本文系“计算机视觉/三维重建论文速递”系列之一,致力于简洁清晰完整地介绍、解读计算机视觉,特别是三维重建领域最新的顶会/顶刊论文(包括但不限于 CVPR, ICCV, ECCV, NeurIPS等)。本次介绍的论文是: CVPR 2023 | Attention-Based Point Cloud Edge Sampling CVPR 2023 | …

【c语言】-- 结构体

&#x1f4d5;博主介绍&#xff1a;目前大一正在学习c语言&#xff0c;数据结构&#xff0c;计算机网络。 c语言学习&#xff0c;是为了更好的学习其他的编程语言&#xff0c;C语言是母体语言&#xff0c;是人机交互接近底层的桥梁。 本章来学习结构体。 让我们开启c语言学习之…

CTF流量题解http4.pcapng

流量分析 导出http 打开报错 验证文件头&#xff0c;发现是zip。 图常片见里文可件能的包16含进:压制缩头包部,word,pdf JPG FF D8 FF E0/FF D8 FF E1 PNG 89 50 4E 47 GIF 47 49 46 38 ZIP 50 4B 03 04 RAR 52 61 72 21 MP3 49 44 33 0 改后缀 使用工具爆破。 git clone git…

WordPress使用【前端投稿】功能时为用户怎么添加插入文章标签

在使用Wordpress做前端投稿功能的时候&#xff0c;可能需要用户填写文章标签&#xff0c;在插入文章的时候很多人不知道怎么把这些标签插入进去&#xff0c;下面这篇文章来为大家带来WordPress使用前端投稿功能时插入文章标签方法。 在Wordpress里 wp_insert_post 此函数的作…

docker菜谱大全

记录docker常用软件安装&#xff0c;感谢小马哥和杨师傅的投稿。&#x1f60e;&#x1f60e;&#x1f60e; 相关文档&#xff1a; DockerHub&#xff1a;https://hub.docker.com/Linux手册&#xff1a;https://linuxcool.com/Docker文档&#xff1a;https://docs.docker.com/Do…

探索Python异常世界:玩转异常、模块与包

文章目录 一 异常概念二 异常的捕获方法2.1 捕获异常的原因2.2 捕获常规异常2.3 捕获指定异常2.4 捕获多个异常2.5 捕获异常并输入异常信息2.6 捕获所有异常2.7 异常else2.8 异常finally 三 异常的传递四 python模块4.1 模块的导入方式4.2 自定义模块4.3 测试模块4.4 注意事项4…

金蝶云星空与旺店通WMS对接集成盘盈单查询连通商品同步接口(盘盈单=>其他入库单)

金蝶云星空与旺店通WMS对接集成盘盈单查询连通商品同步接口(盘盈单>其他入库单) 来源系统:金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用…