【C++】STL——queue的介绍和使用、queue的push和pop函数介绍和使用、queue的其他成员函数

文章目录

  • 1.queue的介绍
  • 2.queue的使用
    • 2.1queue构造函数
    • 2.2queue的成员函数
      • (1)empty() 检测队列是否为空,是返回true,否则返回false
      • (2)size() 返回队列中有效元素的个数
      • (3)front() 返回队头元素的引用
      • (4)back() 返回队尾元素的引用
      • (5)push() 在队尾将元素val入队列
      • (6)pop() 将队头元素出队列

1.queue的介绍

queue的介绍

在这里插入图片描述

  1.队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。

  2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。

  3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:
  empty:检测队列是否为空
  size:返回队列中有效元素的个数
  front:返回队头元素的引用
  back:返回队尾元素的引用
  push_back:在队列尾部入队列
  pop_front:在队列头部出队列

  4. 标准容器类deque和list满足了这些要求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque。

在这里插入图片描述

2.queue的使用

在这里插入图片描述

2.1queue构造函数

在这里插入图片描述

  queue是一个标准库中的容器,用于实现队列的数据结构。queue的构造函数定义如下:其中,T是队列中元素的类型,Container是底层容器的类型,默认为deque。

  以下是一个使用queue的构造函数的示例:

#include <iostream>
#include <queue>int main() {// 创建一个新的队列对象std::queue<int> q;// 添加元素到队列中q.push(1);q.push(2);q.push(3);// 从队列中移除元素std::cout << q.front() << std::endl;  // 输出:1q.pop();std::cout << q.front() << std::endl;  // 输出:2// 获取队列的大小std::cout << q.size() << std::endl;  // 输出:2return 0;
}

2.2queue的成员函数

(1)empty() 检测队列是否为空,是返回true,否则返回false

在这里插入图片描述

  empty()是queue的成员函数,用于检查队列是否为空。它返回一个bool值,如果队列为空则返回true,否则返回false。

  以下是一个使用empty()函数的示例:

#include <iostream>
#include <queue>int main() {std::queue<int> q;if (q.empty()) {std::cout << "队列为空" << std::endl;} else {std::cout << "队列不为空" << std::endl;}q.push(1);if (q.empty()) {std::cout << "队列为空" << std::endl;} else {std::cout << "队列不为空" << std::endl;}return 0;
}

(2)size() 返回队列中有效元素的个数

在这里插入图片描述

  size()是queue的成员函数,用于获取队列中元素的数量。它返回一个整数,表示队列中元素的个数。

  以下是一个使用size()函数的示例:

#include <iostream>
#include <queue>int main() {std::queue<int> q;std::cout << "队列中的元素数量为:" << q.size() << std::endl;q.push(1);q.push(2);q.push(3);std::cout << "队列中的元素数量为:" << q.size() << std::endl;return 0;
}

(3)front() 返回队头元素的引用

在这里插入图片描述

  front()是queue的成员函数,用于获取队列的第一个元素的引用。

  注意:在使用front()函数之前,需要先创建一个队列对象,并且确保队列不为空。否则,如果队列为空,调用front()函数将会导致未定义的行为。

  以下是一个使用front()函数的示例:

#include <iostream>
#include <queue>int main() {std::queue<int> q;q.push(1);q.push(2);q.push(3);std::cout << "队列的第一个元素为:" << q.front() << std::endl;return 0;
}

(4)back() 返回队尾元素的引用

在这里插入图片描述

  back()是queue的成员函数,用于获取队列的最后一个元素的引用。

  注意:在使用back()函数之前,需要先创建一个队列对象,并且确保队列不为空。否则,如果队列为空,调用back()函数将会导致未定义的行为。

  以下是一个使用back()函数的示例:

#include <iostream>
#include <queue>int main() {std::queue<int> q;q.push(1);q.push(2);q.push(3);std::cout << "队列的最后一个元素为:" << q.back() << std::endl;return 0;
}

(5)push() 在队尾将元素val入队列

在这里插入图片描述

  push()是queue的成员函数,用于将元素添加到队列的末尾。

  以下是一个使用push()函数的示例:

#include <iostream>
#include <queue>int main() {std::queue<int> q;q.push(1);q.push(2);q.push(3);std::cout << "队列的元素数量为:" << q.size() << std::endl;return 0;
}

(6)pop() 将队头元素出队列

在这里插入图片描述

  pop()是queue的成员函数,用于删除队列中的第一个元素。

  以下是一个使用pop()函数的示例:

#include <iostream>
#include <queue>int main() {std::queue<int> q;q.push(1);q.push(2);q.push(3);std::cout << "队列的第一个元素为:" << q.front() << std::endl;q.pop();std::cout << "删除第一个元素后,队列的第一个元素为:" << q.front() << std::endl;return 0;
}

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

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

相关文章

如何在Visual Studio Code中用Mocha对TypeScript进行测试

目录 使用TypeScript编写测试用例 在Visual Studio Code中使用调试器在线调试代码 首先&#xff0c;本文不是一篇介绍有关TypeScript、JavaScript或其它编程语言数据结构和算法的文章。如果你正在准备一场面试&#xff0c;或者学习某一个课程&#xff0c;互联网上可以找到许多…

tdengine入门详解

TDengine是什么&#xff1f; TDengine 是一款开源、高性能、云原生的时序数据库&#xff08;Time Series Database, TSDB&#xff09;, 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计&#xff0c;基于C语言开发。 什么是时序数据库&#xff1f;时序数据产生…

C++ 对象数组

**数组元素不仅可以是基本数据类型&#xff0c;也可以是自定义类型。**例如&#xff0c;要存储和处理某单位全体雇员的信息&#xff0c;就可以建立一个雇员类的对象数组。对象数组的元素是对象&#xff0c;不仅具有数据成员&#xff0c;而且还有函数成员。 因此&#xff0c;和基…

Libevent开源库的介绍与应用

libeventhttps://libevent.org/ 一、初识 1、libevent介绍 Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库&#xff0c;主要有以下几个亮点&#xff1a;事件驱动&#xff08; event-driven&#xff09;&#xff0c;高性能;轻量级&#xff0c;专注于网络&#xff…

Linux系统安装部署MongoDB完整教程(图文详解)

前言&#xff1a;本期给大家分享一下目前最新Linux系统安装部署MongoDB完整教程&#xff0c;我的服务器采用的是Centos7&#xff0c;在部署之前我重装了我的服务器&#xff0c;目的是为了干净整洁的给大家演示我是如何一步步的操作的&#xff0c;整体部署还是挺简洁&#xff0c…

如何维护你的电脑:提升性能和延长使用寿命

如何维护你的电脑&#xff1a;提升性能和延长使用寿命 &#x1f607;博主简介&#xff1a;我是一名正在攻读研究生学位的人工智能专业学生&#xff0c;我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑&#xff0c;欢迎随时来交流哦&…

【机器学习】西瓜书习题3.3Python编程实现对数几率回归

参考代码 结合自己的理解&#xff0c;添加注释。 代码 导入相关的库 import numpy as np import pandas as pd import matplotlib from matplotlib import pyplot as plt from sklearn import linear_model导入数据&#xff0c;进行数据处理和特征工程 # 1.数据处理&#x…

Go语音介绍

Go语言介绍 Go 即Golang&#xff0c;是Google公司2009年11月正式对外公开的一门编程语言。 Go是静态强类型语言&#xff0c;是区别于解析型语言的编译型语言。 解析型语言——源代码是先翻译为中间代码&#xff0c;然后由解析器对代码进行解释执行。 编译型语言——源代码编…

Redis 6.5 服务端的读取缓冲区和输出缓冲区执行源码

通篇全文都是不开启事务&#xff0c;不开启多线程&#xff0c;只有主线程去执行 借鉴 Redis源码与设计剖析 – 18.Redis网络连接库分析 客户端与集群之间数据的交互 IO多路复用与客户端、输出缓冲区和读取缓冲区之间的关系一、读取缓冲区1、新客户端连接时注册从socket读取事件…

【css】解决元素浮动溢出问题

如果一个元素比包含它的元素高&#xff0c;并且它是浮动的&#xff0c;它将“溢出”到其容器之外&#xff1a;然后可以向包含元素添加 overflow: auto;&#xff0c;来解决此问题&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head> <style>…

基于遗传算法的试题组卷(二)

实例讲解 一、准备工作 1、问题实体 问题实体包含编号、类型&#xff08;类型即题型&#xff0c;分为五种&#xff1a;单选&#xff0c;多选&#xff0c;判断&#xff0c;填空&#xff0c;问答&#xff0c; 分别用1、2、3、4、5表示&#xff09;、分数、难度系数、知识点。一…

C++ 智能指针

C 智能指针 为什么需要智能指针&#xff1f;auto_ptrunique_ptrshared_ptrweak_ptr智能指针的核心实现unique_ptr的简单实现Counter的简单实现share_ptr的简单实现weak_ptr简单实现 shared_ptr的线程安全性多线程无保护读写 shared_ptr 可能出现的问题make_shared()share_ptr/u…

卸载本机已安装的node.js(v.16.13.0版本)

因为要用多版本的node&#xff0c;准备安装一个nvm管理&#xff0c;所以需要先卸载掉原来安装的v.16.13.0版本。 记录一下卸载过程 1、在系统设置-应用里卸载node 妈蛋这样卸载报错。。找了下根本没有这个路径 那就只能最简单的方法了&#xff0c;全部删掉 1、删除node的安装…

IDEA用Gradle构建项目时,lombok插件无效的解决办法

Lombok 可用来帮助开发人员消除 Java 的重复代码&#xff0c;尤其是对于简单的 Java 对象&#xff08;POJO&#xff09;&#xff0c;比如说getter/setter/toString等方法的编写。它通过注解实现这一目的。 正确使用姿势 一、安装Lombok插件 菜单栏File -> Settings ->…

通过MySQL删除Hive元数据信息

之前遇到过一个问题&#xff0c;在进行Hive的元数据采集时&#xff0c;因为Hive表的文件已经被删除了&#xff0c;当时是无法删除表&#xff0c;导致元数据采集也发生了问题&#xff0c;所以希望通过删除Hive表的元数据解决上述问题。 之前安装时&#xff0c;经过特定的配置后…

Qt实现自定义QDoubleSpinBox软键盘

在Qt应用程序开发中&#xff0c;经常会遇到需要自定义输入控件的需求。其中&#xff0c;对于QDoubleSpinBox控件&#xff0c;如果希望在点击时弹出一个自定义的软键盘&#xff0c;以便用户输入数值&#xff0c;并将输入的值设置给QDoubleSpinBox&#xff0c;该如何实现呢&#…

【MySQL】MySQL数据类型

文章目录 一、数据类型的分类二、tinyint类型2.1 创建有符号数值2.2 创建无符号数值 三、bit类型三、浮点类型3.1 float3.2 decimal类型 四、字符串类型4.1 char类型4.2 varchar类型 五、日期和时间类型六、枚举和集合类型6.1 enum的枚举值和set的位图结构6.2 查询集合find_in_…

大数据技术之Clickhouse---入门篇---SQL操作、副本

星光下的赶路人star的个人主页 积一勺以成江河&#xff0c;累微尘以崇峻极 文章目录 1、SQL操作1.1 Insert1.2 Update 和 Delete1.3 查询操作1.4 alter操作1.5 导出数据 2、副本2.1 副本写入流程2.2 配置步骤 1、SQL操作 基本上来说传统关系型数据库&#xff08;以 MySQL 为例…

Java 使用 Google Guava 实现接口限流

一、引入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version> </dependency>二、自定义注解及限流拦截器 自定义注解&#xff1a;Limiter package com.haita…

linux 常用命令

防火墙 1.查看下防火墙的状态&#xff1a;systemctl status firewalld systemctl stop firewalld 关闭 systemctl disable firewalld 开机不启永久关闭 2.查看已开放的端口firewall-cmd --zonepublic --list-ports firewall-cmd --permanent --zonepublic --…