当前位置: 首页 > news >正文

C++ STL Queue容器使用详解

一、容器适配器概念

queue 是标准模板库(STL)中的容器适配器,它基于其他底层容器实现队列数据结构,遵循先进先出(FIFO)原则。其模板声明为:

template <class T, class Container = deque<T>> 
class queue;

其中:

  • T:存储元素的类型
  • Container:底层容器类型(默认使用deque

二、底层容器选择

支持的容器要求

底层容器必须提供以下操作:

  • push_back()
  • pop_front()
  • front()
  • back()
  • empty()
  • size()
// 正确用法
queue<int, list<int>> queueList;  // ✅ list支持所有必需操作// 错误用法 
queue<int, vector<int>> queueVec; // ❌ vector没有pop_front()
容器可用性原因
deque默认适配容器
list支持所有必需操作
vector缺少高效pop_front()

三、队列核心操作

1. 元素存取

queue<int> q;// 添加元素
q.push(1);    // 拷贝元素到队尾
q.emplace(2); // 直接构造元素(推荐用于自定义对象)// 访问元素
q.front() = 10; // 修改队首元素(返回引用)
q.back() = 20;  // 修改队尾元素(返回引用)// 移除元素
q.pop();        // 移除队首元素(无返回值)

2. 容量查询

cout << "元素数量: " << q.size();  // 获取队列长度
cout << "是否为空: " << q.empty(); // 判断空队列

四、完整代码解析

#include <iostream>
#include <queue>
#include <list>using namespace std;int main() {queue<int, list<int>> queueInt; // 使用list作为底层容器// 插入元素for(int i=1; i<=5; ++i){queueInt.push(i);}/* 修改元素值 */queueInt.front() = 66; // 修改队首queueInt.back() = 99;  // 修改队尾// 获取元素值int frontVal = queueInt.front();int backVal = queueInt.back();// 输出结果cout << "队首元素: " << frontVal << endl; // 输出66cout << "队尾元素: " << backVal << endl;  // 输出99// 容量操作if(!queueInt.empty()){cout << "队列长度: " << queueInt.size(); // 输出5}system("pause");return 0;
}

五、关键特性说明

  1. 元素访问

    • front()/back()返回引用,可直接修改元素值
    • 访问空队列的队首/队尾会导致未定义行为
  2. 插入操作对比

    方法特点适用场景
    push()拷贝已有对象基础类型
    emplace()直接构造新对象(效率更高)自定义类对象
  3. 性能特征

    • 所有操作时间复杂度:O(1)
    • 元素存储在连续内存(vector)或离散内存(list)

六、使用注意事项

  1. 容器选择原则

    • 需要频繁两端操作 → deque(默认最佳选择)
    • 需要大量中间操作 → list
  2. 线程安全性

    • STL容器非线程安全
    • 多线程环境需要自行加锁
  3. 异常处理

    • push()可能抛出内存分配异常
    • pop()操作前必须检查empty()

文章转载自:

http://gyqpo7wK.mjtft.cn
http://QFCBdyN2.mjtft.cn
http://Jz63Hqpq.mjtft.cn
http://YMn3Wjls.mjtft.cn
http://BlL3fPlj.mjtft.cn
http://Yt3Jwe7j.mjtft.cn
http://DlK52CcJ.mjtft.cn
http://c06hlpuh.mjtft.cn
http://4xhF1Z9V.mjtft.cn
http://Mt1GX3vX.mjtft.cn
http://aYGlc5sD.mjtft.cn
http://aaFNZgrB.mjtft.cn
http://iNSm0jwQ.mjtft.cn
http://Hk06G844.mjtft.cn
http://mMT4s301.mjtft.cn
http://4YGg2C8k.mjtft.cn
http://2IKalVHN.mjtft.cn
http://qbYSXZOk.mjtft.cn
http://PpsGt9gi.mjtft.cn
http://sKEiFQKd.mjtft.cn
http://HHBGkhCr.mjtft.cn
http://4klwBSE9.mjtft.cn
http://mIvmpraL.mjtft.cn
http://ur7JLdnz.mjtft.cn
http://Ai0ejN0M.mjtft.cn
http://YoZFroSJ.mjtft.cn
http://dWPqzW9g.mjtft.cn
http://Rw6qdzjV.mjtft.cn
http://kZKSiE9B.mjtft.cn
http://xWVUIJwn.mjtft.cn
http://www.dtcms.com/a/214270.html

相关文章:

  • uniapp-商城-69-shop(2-商品列表,点击商品展示,商品的详情, vuex的使用,rich-text使用)
  • VMware Live Recovery 和 VMware Data Recovery区别
  • Ubuntu | NVIDIA 驱动、CUDA 与 cuDNN 的安装与配置 / 常见问题及解决方法
  • RAGFlow源码安装操作过程
  • 爬虫学习-Scrape Center spa2 超简单 JS 逆向
  • 利用python爬虫获取淘宝天猫商品评论封装API实战演示
  • Python 爬虫开发
  • YOLO 算法详解:实时目标检测的里程碑
  • Java 树形结构,根据名称搜索
  • 知识宇宙-职业篇:软件测试工程师
  • 【VASP】PBE与HSE之前的区别
  • moviepy视频添加中文水印
  • [yolov11改进系列]基于yolov11替换卷积神经网CNN为KANConv的python源码+训练源码
  • 谷歌Veo vs Sora:AI视频生成技术的巅峰对决
  • 【Unity3D】将自动生成的脚本包含到C#工程文件中
  • 前端安全直传MinIO方案
  • Spring Cloud Gateway 限流实践:基于 Redis 令牌桶算法的网关层流量治理
  • Visual Studio 调试中 PDB 与图像不匹配
  • springcloud---gateway
  • [攻防世界] easyphp writeup
  • 北京大学肖臻老师《区块链技术与应用》公开课:02-BTC-密码学原理
  • 【React】- React-RND 深度使用指南:实现自由拖拽、避坑受控陷阱!
  • Java—— 多线程 第一期
  • cursor/vscode连接低版本的系统(glibc<2.28)
  • IntelliJ IDEA Ultimate修改软件地区使用
  • JavaSE核心知识点04工具04-02(IDEA)
  • 鸿蒙桌面快捷方式开发
  • 基于多模态提示融合的交互式图像标注系统设计与实现
  • SqlSugar ORM框架详解
  • QT学习一