C++,std::queue 详解

在这里插入图片描述

文章目录

  • 1. 概述
  • 2. 包含头文件
  • 3. 基本操作
    • 3.1 构造函数
    • 3.2 赋值操作
    • 3.3 成员函数
  • 4. 迭代器
  • 5. 示例
  • 6. 注意事项
  • 参考


1. 概述

std::queue 是 C++ 标准模板库(STL)中的一个容器适配器,它提供了一种先进先出(FIFO)的数据结构。std::queue 通常被用于存储元素集合,并且只允许在尾部添加新元素(push),在头部移除元素(pop)。这种特性使得 std::queue 成为实现队列行为的理想选择。


2. 包含头文件

要使用 std::queue,首先需要包含对应的头文件:

#include <queue>

3. 基本操作

3.1 构造函数

  • queue(): 默认构造函数,创建一个空的队列。
  • queue(const queue& other): 拷贝构造函数,创建一个与 other 相同的队列。

3.2 赋值操作

  • queue& operator=(const queue& other): 赋值操作符,将 other 的内容赋值给当前队列。

3.3 成员函数

  • bool empty() const: 如果队列为空,则返回 true;否则返回 false。
  • size_type size() const: 返回队列中元素的数量。
  • void push(const value_type& val): 在队列尾部添加一个元素 val。注意,对于 C++11 及更高版本,也支持右值引用版本的 push(void push(value_type&& val)),这可以优化移动语义。
  • void pop(): 移除队列头部的元素。如果队列为空,则行为未定义(通常是崩溃)。
  • value_type& front(): 返回队列头部的元素的引用。如果队列为空,则行为未定义。
  • const value_type& front() const: 返回队列头部的元素的常量引用。如果队列为空,则行为未定义。
  • value_type& back(): 返回队列尾部的元素的引用。如果队列为空,则行为未定义。
  • const value_type& back() const: 返回队列尾部的元素的常量引用。如果队列为空,则行为未定义。

4. 迭代器

std::queue 不提供迭代器支持,因为它被设计为仅通过其接口(如 front(), back(), push(), pop())来访问元素。如果你需要迭代访问元素,可能需要考虑使用 std::deque 或 std::list 作为底层容器(通过模板参数指定给 std::queue),但这将破坏 std::queue 提供的抽象和封装。


5. 示例

#include <iostream>  
#include <queue>  int main() {  std::queue<int> myQueue;  // 向队列中添加元素  myQueue.push(10);  myQueue.push(20);  // 访问队列头部的元素  std::cout << "Front element is " << myQueue.front() << std::endl;  // 移除队列头部的元素  myQueue.pop();  // 访问新的队列头部的元素  std::cout << "New front element is " << myQueue.front() << std::endl;  // 检查队列是否为空  if (myQueue.empty()) {  std::cout << "Queue is empty." << std::endl;  } else {  std::cout << "Queue is not empty." << std::endl;  }  return 0;  
}

6. 注意事项

  • 使用 std::queue 时,必须确保不会在队列为空时调用 front(), back(), 或 pop(),这会导致未定义行为(通常是程序崩溃)。
  • 虽然 std::queue 通常与 std::deque 一起使用作为底层容器(因为它是默认选择),但你也可以通过模板参数指定其他容器类型,如 std::list。然而,这可能会影响性能。
  • std::queue 不提供迭代器,因为其主要设计目标是提供一个简单的队列接口,而不是通用的容器接口。

参考

【】std::queue
【】C++ 容器类
【】C++ Queue(队列)
【】队列与C++中的std::queue详解(多图超详细)
【】C++ 清空队列(queue)的几种方法

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

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

相关文章

【研发日记】嵌入式处理器技能解锁(五)——TI C2000 DSP的中断系统

文章目录 前言 背景介绍 中断框架 外设中断 ePIE模块 CPU中断 中断嵌套 应用实例 总结 参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解锁(二)——TI C2000 DSP的SCI(串口)通信》 见…

基于Java的小区物业管理系统APP的设计与实现(论文+源码)_kaic

摘 要 小区物业管理系统是现代社会中非常热门的软件&#xff0c;伴随着社区规模的不断扩大和住户的不断增多&#xff0c;本系统的主要目的是辞别帐本以及传统的单一数据管理系统&#xff0c;快捷的保存用户各种数据信息。本系统针对Java系统展开&#xff0c;使用Java、SpringB…

无人机RTK定位定向技术详解

无人机RTK&#xff08;Real-Time Kinematic&#xff0c;实时动态差分技术&#xff09;定位定向技术&#xff0c;是无人机领域的一项高精度导航与定位技术。它结合了全球导航卫星系统&#xff08;如GPS、GLONASS、Galileo、BDS等&#xff09;与实时差分技术&#xff0c;通过地面…

超越GPT4V,最强多模态MiniCPM-V2.6模型分享

MiniCPM-V2.6是由OpenBMB开发的一款多模态大型语言模型&#xff08;MLLM&#xff09;&#xff0c;专为视觉-语言理解设计。 MiniCPM-V2.6模型能够处理图像、视频和文本输入&#xff0c;并提供高质量的文本输出。 MiniCPM-V 2.6模型在单图像理解方面超越了广泛使用的专有模型&…

机器学习课程学习周报九

机器学习课程学习周报九 文章目录 机器学习课程学习周报九摘要Abstract一、机器学习部分1.1 Word Embedding1.1.1 词嵌入的基本概念1.1.2 word2vec连续词袋模型CBOW1.1.3 word2vec跳字模型Skip-gram 1.2 Transformer代码实践DatasetDataloaderModelLearning rate scheduleModel…

windows javascript 打开、关闭摄像头

1. 效果 打开摄像头 关闭摄像头&#xff08;包括指示灯也关了的&#xff09; 2. 代码 open_close_camera.html // open_close_camera.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>use camera</title>…

使用Dotween制作按钮弹性动画效果

效果&#xff1a; 方式&#xff1a; 优点&#xff0c;不需要写任何代码、稳定、可自定义效果

Agent实际落地的应用 未来生活的无形助手

在这个信息爆炸的时代&#xff0c;我们每个人都在追求更高效的生活方式。想象一下&#xff0c;如果有一个无形的助手&#xff0c;能够理解我们的需求&#xff0c;自动处理繁琐的任务&#xff0c;甚至为我们提供个性化的建议&#xff0c;那将是多么美好的体验&#xff01;这正是…

数字模拟IC设计前端、后端、前仿、后仿新版虚拟机

虚拟化平台&#xff1a;VMware Workstation 15 Pro以上版本 操作系统&#xff1a;CentOS Linux release 7.9.2009 (Core) 一、射频模拟IC设计必备软件 Cadence IC06.18.350/IC23.10.080&#xff08;virtuoso&#xff09; Cadence SPECTRE23.10.538-isr10 Cadence ASSURA04.…

Spring Boot OAuth2.0应用

本文展示Spring Boot中&#xff0c;新版本OAuth2.0的简单实现&#xff0c;版本信息&#xff1a; spring-boot 2.7.10 spring-security-oauth2-authorization-server 0.4.0 spring-security-oauth2-client 5.7.7 spring-boot-starter-oauth2-resource-server 2.7.10展示三个服务…

远程供水无障碍,管线车助力全面消防防护_鼎跃安全

夏季是各类自然灾害的高发季节&#xff0c;其中森林火灾尤为频繁。这一时期的气候特征是干旱少雨&#xff0c;伴随着高温和强风&#xff0c;使得森林火灾的发生频率大幅增加。由于夏季空气湿度低&#xff0c;植被含水量减少&#xff0c;一旦出现火源&#xff0c;火势极易蔓延。…

数据结构-链表-第二天

结合leetcode学习c 链表比数组更易增加和删除数据&#xff0c;但访问速度更慢 定义 链表&#xff08;linked list&#xff09;是一种线性数据结构&#xff0c;其中的每个元素都是一个节点对象&#xff0c;各个节点通过“引用”相连接。 引用记录了下一个节点的内存地址&#…

windows本地搭建zookeeper和kafka环境

zookeeper 1.1 下载zookeeper 下载地址 随便进一个站点&#xff0c;默认是新版本&#xff0c;旧版本点击archives进入&#xff0c;选择合适的版本下载&#xff0c;本文使用的是3.7.2 下载时候选择apache-zookeeper-3.7.2-bin.tar.gz 格式的&#xff0c;编译后的&#xff0c;解…

centos 虚拟机器刚刚安装没有ip地址的问题

刚刚安装好的虚拟机器&#xff0c;我们通过 ip addr 查看ip发现是这样的 该虚拟机器没有ip地址&#xff0c;那么怎么办 原来是在/etc/sysconfig/network-scripts/ifcfg-ens33中关于网络的配置有问题 ONBOOTno 表示不开启网卡&#xff0c;我们需要将这个值进行修改为yes 当前…

prolog 基础 - 关系和属性

首先进入环境&#xff1b; 看一下一开始的提示符是 ?- &#xff0c;现在可以用write语句输出一些东西&#xff1b; 根据资料&#xff0c;在prolog中&#xff0c; 两个对象之间的关系&#xff0c;使用括号表示。比如&#xff0c;jack的朋友是peter&#xff0c;写成friend(ja…

嵌入式堆栈、ARM寄存器

栈里面存放的内容&#xff1a;局部变量和系统信息&#xff0c;函数调用链路也是系统信息的一环 ARM寄存器 LR&#xff1a;程序跳转的时候&#xff0c;返回到的地址就保存到此处 PC&#xff1a;程序计数器&#xff0c;pc 要执行的下一条指令地址&#xff0c;就存放在此处&#…

QT error: undefined reference to `vtable for Net‘

报错 C:\Users\Administrator\Desktop\VideoHill\GikISearch\net.cpp:4: error: undefined reference to vtable for Net 以下是两个可能错误原因 1&#xff0c;未定义Q_OBJECT 宏 在头文件中加上 加上#include <QObject>&#xff0c; 改写继承QObject 和定义宏 …

Unity3D 遍历预制体

Unity3D 遍历预制体进行批量化处理。 遍历预制体 有时候&#xff0c;我们需要对一些预制体资源进行批量化处理&#xff0c;如果每一个预制体都手动处理&#xff0c;就会耗费很多时间精力&#xff0c;也容易出错。 我们可以写一个脚本遍历预制体&#xff0c;对预制体进行修改…

电脑U口管理软件分享|U口管理软件哪个好?

电脑U口&#xff08;即USB端口&#xff09;管理软件是保护电脑安全、防止数据泄露和恶意软件入侵的重要工具。 在选择U口管理软件时&#xff0c;需要考虑其功能、易用性、安全性以及是否满足个人或企业的具体需求。以下是一些值得推荐的电脑U口管理软件及其特点&#xff1a; 1…

白酒与旅行日记:探索世界,品味美酒

在旅行的道路上&#xff0c;我们追寻着不同的风景&#xff0c;体验着不同的文化。而白酒&#xff0c;作为中国文化的瑰宝&#xff0c;也在这一旅途中扮演着不同的角色。它不仅仅是一种饮品&#xff0c;更是一种情感的寄托&#xff0c;一种文化的传承。今天&#xff0c;就让我们…