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

news2024/11/18 9:20:30

文章目录

  • 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 应用场景

任务调度

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

消息传递

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

缓冲区

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

网络请求处理

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

线程池任务调度

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

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

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

相关文章

Docker 方式 部署 vue 项目 (docker + vue + nginx)

1.安装好 nginx 。 2. 把 vue 项目的源码克隆到确定目录下。用 git 管理&#xff0c;所以直接 git clone 到既定目录就行了。 如我的目录是&#xff1a;/root/jiangyu/projects/gentle_vue/gentle_vue_code 。 3. 项目打包&#xff1a; npm run build 复制 会自动生成 dist…

【Linux】-进程概念之进程优先级(如何去进行调度以及进程切换),还不进来看看??

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

小小推磨台(我在芜湖等你)

君问归期已有期&#xff0c;江城相逢话恩奇 我 渐渐明了 因为 有祂同行 有期待 有不知所措 离别故乡 去远方 是求学 更是认识祂 我 还不知 那里有没有家 或许有 或许有人找寻 忽然间 想到不认识的相逢 已然在祂预备之中 在那里 侧耳倾听 彼此谈论 那是和睦同居 好的无比 if (&q…

优雅地处理RabbitMQ中的消息丢失

目录 一、异常处理 二、消息重试机制 三、错误日志记录 四、死信队列 五、监控与告警 优雅地处理RabbitMQ中的消息丢失对于构建可靠的消息系统至关重要。下面将介绍一些优雅处理消息丢失的方案&#xff0c;包括异常处理、重试机制、错误日志记录、死信队列和监控告警等。…

科技资讯|苹果手机版Vision Pro头显专利曝光,内嵌苹果手机使用

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的清单&#xff0c;苹果公司近日获得了一项头显相关的技术专利&#xff0c;展示了一款亲民款 Vision Pro 头显&#xff0c;可以将 iPhone 放置在头显内部充当屏幕。 根据patentlyapple 媒体报道&#xff0c;这是苹果公司…

设计模式——单例模式(懒汉和饿汉)

单例模式 一、概念 单例模式是一种对象创建型模式&#xff0c;使用单例模式&#xff0c;可以保证为一个类只生成唯一的实例对象。也就是说&#xff0c;在整个程序空间中&#xff0c;该类只存在一个实例对象。一个类只能有一个实例在生活中是很常见的&#xff0c;比如打印机程…

若依管理系统后端将 Mybatis 升级为 Mybatis-Plus

文章目录 说明流程增加依赖修改配置文件注释掉MybatisConfig里面的Bean 代码生成使用IDEA生成代码注意 Controller文件 说明 若依管理系统是一个非常完善的管理系统模板&#xff0c;里面含有代码生成的方法&#xff0c;可以帮助用户快速进行开发&#xff0c;但是项目使用的是m…

单例模式_饿汉模式_懒汉模式(含线程安全写法)

前言 某个类在程序中只存在唯一一份实例&#xff0c;叫做单例模式。 目录 前言 一、饿汉模式 二、懒汉模式 &#xff08;一&#xff09;单线程写法 &#xff08;二&#xff09;线程安全写法 &#xff08;三&#xff09;线程安全和不安全写法的区别 结语 一、饿汉模式 …

分享windwosServer2012R--ISO镜像下载地址(含激活教程)

windowsServer2012R----急速网盘下载地址&#xff1a;点击下载 提取码&#xff1a;888999 激活下载&#xff1a;点击下载 提取码&#xff1a;888999

AI和GPT的崛起,对未来项目管理的影响与变革︱原微软项目经理陆敏

原微软项目经理和产品经理人才顾问陆敏先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;AI和GPT的崛起&#xff0c;对未来项目管理的影响与变革。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1…

从LeakCanary看Service生命周期监控

作者&#xff1a;小海编码日记 大家都知道使用LeakCanary可以监控项目中存在的 内存泄漏 问题&#xff0c;那么LeakCanary是怎么实现的呢&#xff1f;LeakCanary通过检测程序中对象的引用关系&#xff0c;收集应该被回收的对象并标记&#xff0c;随后等待GC后&#xff0c;检查该…

线上电影票票务系统开发--APP、H5小程序、网站

一、系统架构 后端架构&#xff1a;采用微服务架构&#xff0c;包括API接口、业务逻辑层和数据访问层。使用云服务器进行数据存储&#xff0c;保证数据的安全性和稳定性。 前端架构&#xff1a;APP采用原生开发方式&#xff0c;前端与后端通过API接口进行数据交互。 二、功能…

司空见惯 - Realwear公司及产品介绍

基于安卓系统的头显设备&#xff0c;Android based headset display&#xff0c;集成了摄像头&#xff0c;还有个小显示屏。 设备价格很贵哦&#xff1a; 显示屏在前方&#xff1a; 官方网站&#xff1a;https://www.realwear.com/ RealWear head-mounted displays. Built to …

直播平台的秘密武器:揭秘流行直播实时美颜SDK的背后技术

近年来&#xff0c;随着社交媒体和直播平台的崛起&#xff0c;实时美颜成为了许多用户在分享自己生活的过程中的一项重要需求。无论是个人的自拍照片&#xff0c;还是主播在直播中的形象展示&#xff0c;美颜效果都直接影响着观众的视觉感受。而支撑这种实时美颜效果背后的技术…

uniapp 实现滑动视图切换 顶部滚动导航栏

无论小程序的时候一般有这个功能,在页面处于首页时候,滑动视图,切换视图顶部滚动导航也跟着切换 1.想要实现这个功能就需要实现顶部导航栏,首先实现顶部滚导航栏 点击高亮颜色显示 模板代码 <scroll-view scroll-x"true" class"scroll-content" > …

MySQL不知道密码,直接修改密码

很简单&#xff0c;我们跳过验证&#xff0c;直接进去修改就好 修改配置文件 vim /etc/my.cnf在[mysqld]下直接添加配置 skip-grant-tables如图&#xff1a; 保存&#xff0c;退出即可。 重启服务 service mysqld restart进入MySQL #(直接点击回车&#xff0c;密码为空)…

20230809在WIN10下使用python3将DOCX文件转换为TXT文件

20230809在WIN10下使用python3将DOCX文件转换为TXT文件 2023/8/9 11:38 python docx txt https://blog.51cto.com/u_16175446/6620474 如何实现Python读取word内容转为TXT的具体操作步骤 如何实现Python读取word内容转为TXT的具体操作步骤 原创 mob649e81576de12023-07-04 14:0…

伪原创文章生成器软件【php源码】

这篇文章主要介绍了python怎么做gui界面&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 火车头采集ai伪原创插件截图&#xff1a; Author&#xff1a;Runsen 现在极少有人会用…

Python入门【串行、并行与并发的区别、 进程、线程、协程的区别、线程是什么? 、协程是什么?、同步和异步介绍、线程Thread 、守护线程】(二十三)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

小红书运营 从入门到精通

大家好&#xff0c;我是网媒智星&#xff0c;今天跟大家分享一下小红书运营的经验&#xff0c;从入门到精通&#xff0c;一文读懂&#xff0c;全篇干货输出&#xff0c;非常实用。 一、注册账号 首先要说明一点&#xff0c;小红书与其他平台有所不同&#xff0c;因此具有特殊性…