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

C++之queue容器

queue 是 C++ STL (Standard Template Library) 中的一种容器适配器,用于实现先进先出(FIFO, First In First Out)的数据结构。queue 提供了一组基本的操作来管理队列前端和后端的元素。queue 的底层可以基于不同的容器(如 dequelist)实现,默认情况下使用 deque

主要特点

  1. 先进先出:最早插入的元素最先被移除。
  2. 基本操作:提供 pushpopfrontbackempty 和 size 等基本操作。
  3. 容器适配器queue 是一个容器适配器,可以基于不同的底层容器实现。

常用操作

定义和初始化
#include <queue>std::queue<int> q; // 创建一个空的 queue 容器
std::queue<int, std::deque<int>> q_deque; // 使用 deque 作为底层容器的 queue(默认)
std::queue<int, std::list<int>> q_list; // 使用 list 作为底层容器的 queue
插入元素
q.push(1); // 将 1 插入队列尾部
q.push(2); // 将 2 插入队列尾部
移除元素
q.pop(); // 移除队列头部的元素
访问队列头部和尾部元素
if (!q.empty()) {std::cout << "Front element: " << q.front() << std::endl; // 访问队列头部元素std::cout << "Back element: " << q.back() << std::endl; // 访问队列尾部元素
} else {std::cout << "Queue is empty." << std::endl;
}
检查队列是否为空
if (q.empty()) {std::cout << "Queue is empty." << std::endl;
} else {std::cout << "Queue is not empty." << std::endl;
}
获取队列的大小
std::cout << "Queue size: " << q.size() << std::endl;
示例代码

以下是一个完整的示例,展示了如何使用 queue

#include <iostream>
#include <queue>int main() {std::queue<int> q;// 插入元素q.push(1);q.push(2);q.push(3);// 输出队列头部和尾部元素std::cout << "Front element: " << q.front() << std::endl;std::cout << "Back element: " << q.back() << std::endl;// 移除队列头部元素q.pop();// 再次输出队列头部和尾部元素std::cout << "Front element after pop: " << q.front() << std::endl;std::cout << "Back element after pop: " << q.back() << std::endl;// 检查队列是否为空if (q.empty()) {std::cout << "Queue is empty." << std::endl;} else {std::cout << "Queue is not empty." << std::endl;}// 获取队列的大小std::cout << "Queue size: " << q.size() << std::endl;return 0;
}

总结

queue 是一个非常有用的数据结构,适用于需要先进先出操作的场景。常见的应用场景包括任务调度、消息队列、缓冲区管理等。由于 queue 是一个容器适配器,你可以选择不同的底层容器来实现它,以适应不同的性能需求。默认情况下,queue 使用 deque 作为底层容器,因为它在大多数情况下提供了良好的性能。

底层容器的选择

  • deque:默认选择,支持高效的前后插入和删除操作。
  • list:支持双向迭代器,适用于需要频繁插入和删除操作的场景。

选择合适的底层容器可以优化 queue 的性能,特别是在处理大量数据时。


http://www.mrgr.cn/news/67817.html

相关文章:

  • HarmonyOS使用arkTS拉起指定第三方应用程序
  • 【Linux驱动开发】通过设备树节点来配置和调用GPIO(pinctrl节点和gpio-controller)
  • 查缺补漏----用户上网过程(HTTP,DNS与ARP)
  • 模拟实现strcat函数
  • redis与本地缓存
  • 考完PMP之后,我心态崩了....
  • 前端-计算机网络
  • 信息流不同行业账户流量池有区别吗?
  • 宠物空气净化器是养宠智商税吗?真实测评霍尼韦尔、希喂、米家
  • 【HarmonyOS】鸿蒙中Interface实例实现的书写格式
  • 从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
  • 为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
  • LeetCode 热题100 之 栈
  • 最新!2024年十大邮件群发软件年终盘点
  • 【工具分享】Agent.iih勒索病毒解密工具
  • 《龙腾世纪4》拍照模式照片保存位置介绍
  • 国土空间规划实景三维智能可视化分析平台
  • 人工智能从业证书--抓住未来十年的趋势!
  • 微深节能 煤码头自动化翻堆及取料集控系统 格雷母线
  • 软件设计师:具有3个节点的二叉树有5种,可推测出具有4个节点的二叉树有几种?推测方式详解
  • UE5.1 控制台设置帧率
  • Me-LLaMA——用于医疗领域的新型开源大规模语言模型
  • Spring JDBC模板
  • linux系统编译ptlib
  • 【CANOE】【学习】【诊断功能】正响应抑制
  • Excel 无法打开文件