C++,std::queue 详解

关于C++ 中的queue(STL)用法 queue就是队列,c++的STL(标准模板库)里的一个容器。当然队列是可以通过用数组实现的,queue也是一种方法,使用queue的话需要添加头文件queue,stdlib.h或者直接调用万能头文件 bits/stdc++.h 。 queue的常用基本操作 1、front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义... 阅读详情
AI摘要

本文详细介绍C++标准模板库(STL)中的std::queue容器适配器。std::queue是一种先进先出(FIFO)的数据结构,适用于需要在尾部添加元素并在头部移除元素的应用场景。文章涵盖std::queue的基本操作、成员函数以及示例代码。

在这里插入图片描述


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)的几种方法

C++(26): 标准库 <queue> 【摘要】C++中的queue是一种遵循先进先出(FIFO)原则的容器适配器,默认基于deque实现。它提供受限的操作接口(push、pop、front等),不支持随机访问或遍历。queue在任务调度、BFS算法等需要严格顺序处理的场景中表现优异,其操作时间复杂度均为O(1)。使用时需注意空队列风险、底层容器选择差异(deque/list/vector)以及线程安全问题。示例展示了如何创建队列、插入/删除元素及获取队列信息。queue通过限制操作类型保证了数据处理的顺序性,是标准库中实现FIFO逻辑的高效工具 阅读详情

相关推荐

常用C++队列(Queue)详解与应用

常用C++队列(queue)详解

w_m_x_d的博客 2088

STL之queue使用

std::queue是一种先进先出的数据结构,它并不是一个真正的容器,而是一处适配器,它是对std::deque的包装。其定义如: 模板的第二个参数指定了queue的实现是std::deque。 1,std::queue的push操作 如果std::queue保存的对象,则push操作时,会调用对象的拷贝构造函数,插入queue中的是对象的一份拷贝。 #include <queue> #include <iostream> #include <string.h&.

tianyexing2008的博客 5575

C++,STL容器适配器,queue:队列深入解析

std::queue是C++标准模板库(STL)提供的容器适配器,遵循先进先出(FIFO)原则。它基于底层容器(默认std::deque)封装实现,为队列操作提供统一接口。

汽车电子软件领域知识分享 1344

std::queue的使用

定义于头文件 &lt;queue&gt; template&lt; class T, class Container = std::deque&lt;T&gt; &gt; class queue; std::queue 类是容器适配器,它给予程序员队列的功能——尤其是 FIFO (先进先出)数据结构。 类模板表现为底层容器的包装器一一只提供特定的函数集合。 queue 在底层容器...

mayue_web的博客 2万+

2019美亚杯团体赛刷题 部分题解(1-42、106-116)

文章目录写在前面使用工具刷题1.在黑客路由器里,有一台设备的MAC地址为00:11:6B:47:4D:55,请问它的IP地址是什么?2.在黑客路由器里,发现一设备的IP地址为192.168.0.103,请问该设备为如下哪一个:3.警方已经查证所有连接此router的设备都归黑客所有,根據黑客路由器的訊息,下列哪组(设备---ip)是错误的:4.Hacker现场检获的Windows主机硬盘已成功取证并制作成镜像Win1.E01,下列哪个是其硬盘证据文件的MD5哈希值。5.MD5hash算法会产生一个什么大小的

7ruth0hn的博客 7545

sm2国密加密算法js实现(真实可用)

sm2国密加密算法js实现加密后内容引入文件js实现sm2加密 加密后内容 可自行验证是否是你需要的sm2加密算法 私钥:BF1F907B4E0487F798DC80AFD7BC2A6201E8514233002272EA3BE2FC6F797843 公钥:前缀04+x坐标+y坐标 042DBA45E7B03394F603CADAFCDDEC854D3E01A4E9C52CD799B85B1A14BDB970137AE58BA553D79F058604DC1CD4B77DE5408BA3308E767584

gusijin的博客 1万+

从 C 到 C++:容器适配器 std::stack 与 std::queue 详解

对于刚从 C 语言转向 C++ 的朋友来说,标准库中的容器适配器是提升开发效率的利器。std::stack(栈)和std::queue(队列)作为两种常用的容器适配器,封装了底层容器的复杂细节,提供了简洁直观的操作接口,彻底告别了 C 语言中手动实现栈和队列的繁琐。本文将详细介绍这两种适配器的特性、底层实现及完整操作指南。

weixin_59661438的博客 1013

保姆级教程:用AI辅助反编译Python3.9+的EXE文件(兼容新版pycdc工具)

本文详细介绍了如何利用AI技术辅助反编译Python 3.9+的EXE文件,解决传统工具如uncompyle6无法处理新版字节码的问题。通过pycdc工具和AI大模型的结合,开发者可以高效还原代码逻辑,并提供了从EXE解包到字节码解析的完整流程,适用于逆向工程和代码分析场景。

hill8的博客 1224

「C/C++」C++ STL容器库 之 std::queue 队列容器

std::queue是一个简单且易于使用的容器适配器,提供了基于队列的数据结构,适用于许多不同的编程场景。它的主要优点是先进先出(FIFO)的特性,使得它在实现任务调度、广度优先搜索(BFS)算法、消息队列、生产者-消费者问题等需要FIFO数据结构的场景中非常有用。在使用std::queue默认情况下,std::queue使用std::deque作为其底层容器,但也可以根据需要选择其他容器(如std::list在调用front()back()pop()等函数之前,应确保队列不为空,以避免未定义行为。

何曾参静谧的博客 1328

解密网页视频Blob链接:从防盗链到流媒体分片技术

本文深入解析了网页视频中Blob链接的工作原理,揭示了其作为现代视频防盗链与流媒体分片技术核心的本质。文章详细阐述了Blob对象与Media Source API如何协同工作,将视频数据分片传输,并结合HTML5的video元素实现安全、流畅的播放体验,有效提升了资源保护能力。

c7d8e的博客 317

UE游戏引擎材质简单入门

什么是物体的材质,材质属性定义了物体的某些特性,从而决定了物体表面是如何与光线相作用的。UE中物理基础渲染(Physically Based Rendering OR PBR)几乎可以让我们模拟显示世界中的任何材质。那么如何在UE中制作出真实的PBR材质,基于我们提供的游戏引擎插件,如何将这些材质资源导出,并应用到 SuperMap iClient3D for Cesium/WebGL 平台上,提升模型的显示效果呢,下面小编将详细讲解一下。

m0_71055362的博客 2511

C++/C++11中std::queue的使用

C++/C++11中std::queue的使用

网络资源是无限的 4万+

YOLO26 正式发布源代码!极致速度优化方案, 面向工业级落地的目标检测模型!

YOLO26 作为 Ultralytics 公司于 2025 年 9 月发布的最新一代目标检测模型,在架构设计和技术实现上展现了显著的创新。本文深入分析了 YOLO26 的核心架构改进和技术原理,重点探讨了其在边界框回归、推理流程、损失函数设计和优化算法方面的突破性进展。

魔改工程师的博客 1243

C++(6): std::queue的使用

std::queue(队列)是C++标准容器之一,提供了的一种先进先出(FIFO)的线性存储结构。 std::queue讲究先进先出,即从队列一端插入数据(入队),而从队列另一端提取数据(出队)。

tecsai的博客 1421

开源推荐:5个最实用的AIGC风格迁移项目

随着人工智能技术的飞速发展,AIGC(人工智能生成内容)领域取得了显著的成果。风格迁移作为AIGC中的一个重要分支,旨在将一种图像的风格应用到另一种图像上,创造出具有独特艺术效果的新图像。本文的目的是为读者推荐5个最实用的AIGC风格迁移开源项目,详细介绍这些项目的技术原理、使用方法和应用场景,帮助读者在实际项目中选择合适的工具进行风格迁移。文章的范围涵盖了这些项目的核心概念、算法原理、数学模型、项目实战以及相关的学习资源和未来发展趋势等方面。

AI 原生应用开发的博客 1704

【HALCON 25.11 + C#】 01:2026年工业机器视觉实战详解(从入门到精通)

2026年机器视觉市场规模将突破230亿美元,HALCON 25.11的革命性更新与C#的工业集成优势形成黄金技术栈。本文作为付费专栏开篇序章,聚焦“为什么现在必须学25.11+C#”的核心问题,通过真实工业案例、五项核心技术突破、联合编程架构优势及30篇系统学习路线,全方位论证其投资价值。读者将掌握持续学习、深度OCR加速等关键技能,获得可直接上产线的工业级代码资产与架构设计思维,解决柔性生产、边缘部署等核心痛点,成为具备技术溢价的机器视觉工程师。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1224

STL详解(三) 队列容器queue

一、queue(队列)简介: 队列也是一种逻辑数据结构,其具有先进先出的特性,只能在队的前端进行删除, 在队的后端进行插入。针对这种特性,可以实现一些较为复杂的逻辑。在实际应用中,部分程序也正需要这样一种顺序进出的数据处理方式。使用这样的逻辑处理方式,使得我们可以将更多精力放在如何处理顺序逻辑之外的事情,对于编程、开发来讲,提供了极大的方便。 同stack类似,queue也可以看成是容器的容...

流年的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++/C++11中std::priority_queue的使用

一、优先队列的原理及使用 std::priority_queue:在优先队列中,优先级高的元素先出队列,并非按照先进先出的要求,类似一个堆(heap)。其模板声明带有三个参数,priority_queue&lt;Type, Container, Functional&gt;, 其中Type为数据类型,Container为保存数据的容器,Functional为元素比较方式。Container必须是...

雪雪 2479

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【C++】 多线程下std::queue的线程安全?看完这篇就懂了

在多线程环境中,std::queue由于其非线程安全的特性,容易引发数据竞争、条件竞争和内存问题,导致程序崩溃或数据错乱。文章深入分析了std::queue在多线程环境下的问题根源,并提供了几种解决方案

Maryhuan的博客 1548

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Standard Template Library (STL) - std::queue::front

Standard Template Library (STL) - std::queue::front public member function - 公开成员函数 1. std::queue::front C++98 value_type& front(); const value_type& front() const; C++11 reference& front(); const_reference& front() const; access the first

程永强 813

Standard Template Library (STL) - std::queue::swap

Standard Template Library (STL) - std::queue::swap public member function - 公开成员函数 mutex:n. 互斥,互斥元,互斥体,互斥量 synchronization [ˌsɪŋkrənaɪˈzeɪʃn]:n. 同步,同时性 primitive [ˈprɪmətɪv]:adj. 原始的,远古的,简单的,粗糙的 n. 原始人 simultaneously [ˌsɪmlˈteɪniəsli]:adv. 同时地 exclusive [ɪ

程永强 884

从deque到std::stack,std::queue,再到iOS 中NSArray(CFArray)

从deque到std::stack,std::queue,再到iOS 中NSArray(CFArray) deque deque双端队列,分段连续空间数据结构,由中控的map(与其说map,不如说是数组)控制,map中每个槽指向一个固定大小的缓冲(连续的线性空间)。deque的迭代器,关键的四个指针: cur //所指缓冲区中的现元素 f...

174

Standard Template Library (STL) - std::queue::empty

Standard Template Library (STL) - std::queue::empty public member function - 公开成员函数 1. std::queue::empty bool empty() const; Test whether container is empty - 测试容器是否为空 检查底层的容器是否为空。 Returns whether the queue is empty: i.e. whether its size is zero. 返回队列是否为空

程永强 605

Standard Template Library (STL) - std::queue::size

Standard Template Library (STL) - std::queue::size public member function - 公开成员函数 1. std::queue::size size_type size() const; Return size - 返回容纳的元素数 Returns the number of elements in the queue. 返回队列中的元素数。 Returns the number of elements in the underlying c

程永强 662

Standard Template Library (STL) - std::queue::push

Standard Template Library (STL) - std::queue::push public member function - 公开成员函数 1. std::queue::push C++98 void push (const value_type& val); C++11 void push (const value_type& val); void push (value_type&& val); 在队列后端添加实参指定的元素。 inserts e

程永强 644

Standard Template Library (STL) - std::queue::back

Standard Template Library (STL) - std::queue::back public member function - 公开成员函数 1. std::queue::back C++98 value_type& back(); const value_type& back() const; C++11 reference& back(); const_reference& back() const; 返回到 queue 中末元素的引用。这是最近推

程永强 525
上一篇: C++,std::bind 详解
下一篇: C++,std::chrono 详解
智驾
博客等级 码龄11年 6670粉丝 574原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值