【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;
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java EE】SpringBoot的创建与简单使用

文章目录 &#x1f340;环境准备&#x1f333;Maven&#x1f332;SpringBoot是什么&#x1f384;Spring Boot 项目创建&#x1f338;使用Idea创建&#x1f338;创建SpringBoot项⽬&#x1f338;SpringBoot项目的运行 ⭕总结 &#x1f340;环境准备 如果你的IDEA是专业版&#…

六、从零实战企业级K8S本地部署ThingsBoard专业版集群

1、从 docker hub 拉取 ThingsBoard PE 映像(所有节点) 1.1、查看k8s信息(主节点) kubectl cluster-info #查看k8s集群信息 kubectl get node #查看节点信息 kubectl get pod -A #查看内部组件1.2、从 docker hub 拉取 ThingsBoard PE 映像(所有…

浅谈物联网高速公路智慧配电室系统构建方案

关键词&#xff1a;高速公路&#xff1b;智慧供配电&#xff1b;电力监控&#xff1b;配电室智能运维托管&#xff1b;安全隐患 0、引言 随着高速公路事业的不断发展和路网的不断延伸&#xff0c;传统的管理方式已难以满足日益增长的需求&#xff0c;动态管理和安全隐患预警成…

【Mathematical Model】基于Python实现随机森林回归算法特征重要性评估线性拟合

前段时间在做遥感的定量反演&#xff0c;所以研究了一下回归算法&#xff0c;由于之前发的几篇博文都是定义好基础方程进行拟合的&#xff0c;不太满足我的需求。所以研究了一下随机森林回归的算法&#xff0c;之前使用随机森林都是做分类&#xff0c;这次做了回归算法也算是补…

有同学和我说,深度学习不用特征工程,只有浅层机器学习方法采用特征工程,我说你误会了,我给你好好解释吧!!

1. 通俗解释 浅层机器学习算法&#xff08;如逻辑回归、决策树、支持向量机等&#xff09;和深度学习算法&#xff08;如神经网络&#xff09;在特征工程上的依赖性确实存在一些差异。 浅层机器学习算法的特征工程依赖性&#xff1a; 浅层算法通常需要手工选择和设计特征&…

计算机语言 之【C++】入门级知识讲解(命名空间,C++输入输出,缺省参数,函数重载,引用,内敛函数,auto关键字,for循环,指针空值nullptr)

三点睡六点起&#xff0c;阎王夸我好身体 不到三点我不睡&#xff0c;太平间里抢C位 一、命名空间 1.命名空间的作用 2.命名空间定义 3.命名空间使用 二、C的输入输出 1.输入输出说明介绍 2.std命名空间的使用惯例 三、缺省参数 1.缺省参数概念 2.缺省参数分类 四、…

华为CCE部署RabbitMQ中间件操作文档

1、创建有状态&#xff08;StatefulSet&#xff09;部署 中间件一般为有状态部署&#xff0c;有状态部署与无状态部署区别参考文档&#xff1a;K8S有无状态部署-CSDN博客 1.1、基本信息 注意&#xff1a; 应用名称命名规则&#xff1a;&#xff08;命名规则最好统一&#xff…

Redis中的复制功能(三)

复制 服务器运行ID 除了复制偏移量和复制积压缓冲区之外&#xff0c;实现部分重同步还需要用到服务器运行ID(run ID): 1.每隔Redis服务器&#xff0c;不论主服务器还是从服务&#xff0c;都会有自己的运行ID2.运行ID在服务器启动时自动生成&#xff0c;由40个随机的十六进制…

【C++】STL--vector

目录 vector的使用 vector的定义 vector iterator的使用 vector空间增长问题 vector增删查改 vector深度剖析及模拟实现 vector核心接口模拟实现 使用memcpy拷贝问题 迭代器失效问题 vector的使用 vector的定义 C中&#xff0c;vector是一个模版&#xff0c;第一个参…

全文更新:什么是Power Path?充电时是充电器供电还是电池供电?

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 昨天的文章误删了一部分&#xff0c;很多同学留言想看全文&#xff0c;现补充、更新如下&#xff1a; 前段时间&#xff0c;交流群里有位同学…

【图论】【分类讨论】LeetCode3017按距离统计房屋对数目

本文涉及的知识点 图论 分类讨论 本题同解 【差分数组】【图论】【分类讨论】【整除以2】3017按距离统计房屋对数目 LeetCode3017按距离统计房屋对数目 给你三个 正整数 n 、x 和 y 。 在城市中&#xff0c;存在编号从 1 到 n 的房屋&#xff0c;由 n 条街道相连。对所有 …

开源模型应用落地-qwen1.5-7b-chat-LoRA微调代码拆解

一、前言 本篇文章将解析 QWen1.5 系列模型的微调代码&#xff0c;帮助您理解其中的关键技术要点。通过阅读本文&#xff0c;您将能够更好地掌握这些关键技术&#xff0c;并应用于自己的项目中。 开源模型应用落地-qwen1.5-7b-chat-LoRA微调&#xff08;二&#xff09; 二、术语…