【C++ STL容器适配器】queue 队列

文章目录

  • 【 1. 基本原理 】
  • 【 1. queue 的创建 】
    • 2.1 使用默认的 deque 基础容器创建一个空的 queue
    • 2.2 指定基础容器创建 queue
    • 2.3 通过基础容器来初始化 queue 容器适配器
    • 2.4 通过一个 queue 初始化另一个 queue
  • 【 3. queue 支持的成员函数 】

【 1. 基本原理 】

  • STL queue 容器适配器 模拟的就是 队列 这种存储结构,因此对于任何需要用队列进行处理的序列来说,使用 queue 容器适配器都是好的选择。
  • 和 stack 栈容器适配器不同,queue 容器适配器有 2 个开口, 其中一个开口专门用来输入数据,另一个专门用来输出数据,如下图所示。
    在这里插入图片描述
  • 这种存储结构最大的特点是,最先进入 queue 的元素,也可以最先从 queue 中出来,即用此容器适配器存储数据具有 先进先出(First In First Out,FIFO)的特点,因此 queue 又称为队列适配器。

【 1. queue 的创建 】

  • queue 容器适配器以模板类 queue<T,Container=deque<T>>(其中 T 为存储元素的类型,Container 表示底层容器的类型)的形式位于 <queue>头文件 中,并定义在 std 命名空间 里。

2.1 使用默认的 deque 基础容器创建一个空的 queue

  • 创建一个可存储 int 类型元素,底层采用 deque 容器的 queue 容器适配器。
queue<int> values;

2.2 指定基础容器创建 queue

  • 可以手动指定 queue 容器适配器底层采用的基础容器类型,基础容器存储的 数据类型 必须和 queue 容器适配器存储的元素类型保持一致
    • 作为 queue 容器适配器的基础容器,其必须提供 front()、back()、push_back()、pop_front()、empty() 和 size() 这几个成员函数,符合条件的序列式容器仅有 deque 和 list。
queue<int, list<int>> values;
queue<int, deque<int>> values;

2.3 通过基础容器来初始化 queue 容器适配器

  • 可以用基础容器来初始化 queue 容器适配器,只要该 基础容器类型和 queue 底层使用的基础容器类型相同即可。例如:
    • 由于 my_queue 底层采用的是 deque 容器,和 values 类型一致,且存储的也都是 int 类型元素,因此可以用 values 对 my_queue 进行初始化。
deque<int> values{1,2,3};
queue<int> my_queue(values);

2.4 通过一个 queue 初始化另一个 queue

  • 还可以直接通过 queue 容器适配器来初始化另一个 queue 容器适配器,只要它们 存储的元素类型以及底层采用的基础容器类型相同 即可。例如:
deque<int> values{1,2,3};
queue<int> my_queue1(values);

queue<int> my_queue(my_queue1);
//或者使用
//queue<int> my_queue = my_queue1;
  • 值得一提的是,第 3、4 种方法中 my_queue 容器适配器的数据是经过拷贝得来的,也就是说,操作 my_queue 容器适配器中的数据,并不会对 values 容器以及 my_queue1 容器适配器有任何影响;反过来也是如此。

【 3. queue 支持的成员函数 】

  • queue 容器适配器和 stack 有一些成员函数相似,但在一些情况下,工作方式有些不同。
queue 支持的成员函数功能
empty()如果 queue 中没有元素的话,返回 true。
size()返回 queue 中元素的个数。
front()返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
back()返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
push(const T& obj)在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
emplace()在 queue 的尾部直接添加一个元素。
push(T&& obj)以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
pop()删除 queue 中的第一个元素。
swap(queue &other_queue)将两个 queue 容器适配器中的元素进行互换,需要注意的是,进行互换的 2 个 queue 容器适配器中存储的元素类型以及底层采用的基础容器类型,都必须相同。
  • queue 没有迭代器,因此访问元素的唯一方式是遍历容器,通过不断移除访问过的元素,去访问下一个元素
  • 实例
#include <iostream>
#include <queue>
#include <list>
using namespace std;
int main()
{
    //构建 queue 容器适配器
    std::deque<int> values{ 1,2,3 };
    std::queue<int> my_queue(values);//{1,2,3}
    //查看 my_queue 存储元素的个数
    cout << "size of my_queue: " << my_queue.size() << endl;
    //访问 my_queue 中的元素
    while (!my_queue.empty())
    {
        cout << my_queue.front() << endl;
        //访问过的元素出队列
        my_queue.pop();
    }
    return 0;
}

在这里插入图片描述

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

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

相关文章

ChatGPT(3.5版本)开放无需注册:算力背后的数据之战悄然打响

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

AI Agents产品图谱+网站合集

这个网站收集了市面受欢迎的项目&#xff0c;包括开源项目和闭源项目以及公司 地址&#xff1a;通过浏览列表中的AI代理项目和公司&#xff0c;社区里的创业者可以了解当前市场上的主要玩家和他们的产品特点&#xff0c;进行市场趋势分析和竞争分析。

2024妈妈杯数学建模思路ABCD题思路汇总分析 MathorCup建模思路分享

1 赛题思路 (赛题出来以后第一时间在群内分享&#xff0c;点击下方群名片即可加群) 2 比赛日期和时间 报名截止时间&#xff1a;2024年4月11日&#xff08;周四&#xff09;12:00 比赛开始时间&#xff1a;2024年4月12日&#xff08;周五&#xff09;8:00 比赛结束时间&…

看书学习各类编程效率高吗?

最近给大家争取到一个 深夜福利 保证你在深夜手机刷到 嘎嘎香~ 那就是 官方授权 大流量卡 缺点&#xff1a;月租太便宜 185GB~ 100分钟通话时长~ 长期套餐~ 畅想自由的气息 流量自由的同时还拥有超长通话&#xff0c;而且免费领取。 名额有限&#xff0c;咱们废话不…

青蛙跳杯子【蓝桥杯】/bfs

青蛙跳杯子 bfs 思路&#xff1a;刚开始用的是dfs&#xff0c;但是不太行&#xff0c;DFS 可能会导致搜索深度过深&#xff0c;增加了时间复杂度&#xff0c;BFS 适合求解最短路径问题&#xff0c;BFS 在搜索过程中&#xff0c;首先访问距离初始节点最近的节点&#xff0c;因此…

欧拉函数确定1-n有多少个数和 n 互质详解 附C语言代码 蓝桥杯互质数的个数

唯一分解定理 任意一个大于 1 的正整数都能被唯一地分解为质因数的乘积。 例如 8 2*2*2&#xff0c; 171 3*3*19&#xff0c; 30 2*3*5&#xff0c; 19 19。注意1既不是质数也不是合数。 为什么判断一个数是否是质数只要判断2-√n中有没有因数 24可以分解成 4*6&#x…

时序预测 | Python实现BiGRU-RELM时间序列预测

时序预测 | Python实现BiGRU-RELM时间序列预测 目录 时序预测 | Python实现BiGRU-RELM时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BiGRU-RELM时间序列预测分析 将BiGRU和RELM两种模型进行了融合&#xff0c;BiGRU进行预测&#xff0c;RELM对BiGRU模型的预…

算法刷题Day24 | 216.组合总和III、17.电话号码的字母组合

目录 0 引言1 组合总和 III1.1 我的解题 2 电话号码的字母组合2.1 我的解题2.2 优秀的题解 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;算法刷题Day24 | 216.组合总和III、17.电话号码的字母组合❣️ 寄…

Linux基础篇:Linux第三方软件仓库——可以让Linux变得有趣的软件仓库

Linux第三方软件仓库——可以让Linux变得有趣的软件仓库 一、epel源介绍 EPEL&#xff08;Extra Packages for Enterprise Linux&#xff09;源是一个由Fedora项目组维护的第三方软件仓库&#xff0c;为企业级Linux发行版&#xff08;如Red Hat Enterprise Linux&#xff08;…

opencv+python(通道的分离与合并)笔记

分割图像通道&#xff1a; 通过函数mvsplit(img)&#xff1b;mv返回的通道&#xff1b; RGB有3个通道&#xff1b;灰度图只有一个通道&#xff1b; b,g,r cv2.split(img)cv2.imshow("b",b)#通道bcv2.imshow("g",g)#通道gcv2.imshow("r",r)#通道…

Flutter 应用数据持久化指南

1. 介绍 1.1 什么是数据持久化&#xff1f; 数据持久化是指将应用程序中的数据保存在持久存储介质&#xff08;如硬盘、数据库等&#xff09;中的过程。在计算机科学领域&#xff0c;持久化数据是指数据在程序退出或系统关机后仍然存在的能力。这种持久性使得数据可以在不同的…

为什么说“微隔离技术“ 那么重要,德迅零域给您答案

随着网络安全威胁不断增加&#xff0c;传统安全措施难以承受这种压力&#xff0c;人们需要更强大的防护工具来确保个人和组织的数据不会被攻击者窃取。 “微隔离”技术是一种在设备内部进行隔离的安全机制。它基于各种硬件或软件实现不同隔离策略&#xff0c;将不同的数据或应用…

C++——STL容器——string

目录 1.构造函数 模拟实现 2.析构函数 模拟实现 3.string遍历 3.1 c_str、size、lenth、capacity等 模拟实现 3.2 字符串元素访问 3.2.1 []操作符重载、at 模拟实现 3.2.2 front、back等 3.3 迭代器 模拟实现 4.赋值操作 4.1 赋值重载函数 模拟实现 4.2 assig…

C#手术麻醉信息系统源码,技术框架:Vue,Ant-Design+百小僧开源框架

C#手术麻醉信息系统源码&#xff0c;技术框架&#xff1a;Vue&#xff0c;Ant-Design百小僧开源框架 手术麻醉系统主要用于在手术过程中监测和控制患者的状态&#xff0c;确保手术的顺利进行并保障患者的生命安全。该系统通过一系列先进的医疗设备和技术&#xff0c;为手术患者…

【tensorflow框架神经网络实现鸢尾花分类—优化器】

文章目录 1、前言2、神经网络参数优化器2.1、SGD2.2、SGDM2.3、Adagrad2.4、RMSProp2.5、Adam 3、实验对比不同优化器4、结果对比 1、前言 此前&#xff0c;在【tensorflow框架神经网络实现鸢尾花分类】一文中使用梯度下降算法SGD&#xff0c;对权重 w w w和偏置 b b b进行更新…

多态.Java

&#xff08;1&#xff09;什么是多态&#xff1f; 同类型的对象&#xff0c;表现出不同的形态。前者指父类&#xff0c;后者指不同的子类 说简单点&#xff0c;就是父类的同一种方法&#xff0c;可以在不同子类中表现出不同的状态&#xff0c;或者说在不同子类中可以实现不同…

[技术闲聊]我对电路设计的理解(七)-Cadence原理图绘制

一、原理图软件推荐 之前的章节有讲过AD、PADS、Cadence&#xff0c;以及三者的应用标准&#xff0c;今天再讲讲这一点。 如果是学生&#xff0c;可以学习AD软件&#xff0c;因为学校在学习&#xff0c;上手容易&#xff0c;而且即使工作后&#xff0c;如果是电机控制等4层板或…

websokcet服务端实现

一/websokcet服务端实现 步骤一&#xff1a; springboot底层帮我们自动配置了websokcet&#xff0c;引入maven依赖 1 2 3 4 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</arti…

力扣刷题 二叉树遍历的统一迭代法

题干 给定一个二叉树的根节点 root &#xff0c;返回 它的 前中后序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root […

Python 之 Fastapi 框架学习

依赖安装 Fastapi 有版本要求&#xff0c;需要的 Python 版本至少是 Python 3.8&#xff08;不要犟&#xff0c;按照版本要求来&#xff0c;我最先也是在我 Python3.6 上装的&#xff0c;果不其然跑不起来&#xff09;&#xff0c;幸好我 Win7 老古董能支持的 Python 最高版本…