deque、queue 和 priority_queue 的区别

在 C++ 标准库中,std::deque、std::queue 和 std::priority_queue 是三种不同的容器和容器适配器,它们各自有不同的特性和用途:

std::deque(双端队列)

  • 特性 :std::deque(double-ended queue)是一个双端队列,它支持在序列的前端和后端快速插入和删除元素。
  • 随机访问 :提供对序列中任意位置的快速访问,支持 operator[] 和 at() 方法。
  • 内存分配:通常由多个固定大小的数组块组成,这些块在内存中可能不连续。
  • 使用场景:适合需要在序列两端进行操作的场合,如实现双端队列、某些类型的缓存等。

std::deque 的常用函数:

  • push_back(value):在序列的后端插入一个新元素。
  • push_front(value):在序列的前端插入一个新元素。
  • pop_back():移除序列后端的元素。
  • pop_front():移除序列前端的元素。
  • operator[](index):访问序列中指定位置的元素。
  • at(index):访问序列中指定位置的元素,带边界检查。
  • size():返回序列中元素的数量。
  • clear():移除序列中的所有元素。

std::queue

  • 特性 :std::queue 是一个容器适配器,提供了先进先出(FIFO)的数据结构。
  • 受限访问:只允许在队尾插入元素,在队首移除元素,不支持随机访问。
  • 底层容器 :通常使用 std::deque 或 std::list 作为底层容器,但用户无法直接访问这些容器。
  • 使用场景:适合需要先进先出行为的场合,如任务调度、广度优先搜索等。

std::queue 的常用函数:

  • push(value):在队列的后端插入一个新元素。
  • pop():移除队列前端的元素。
  • front():访问队列前端的元素。
  • back():访问队列后端的元素。
  • empty():检查队列是否为空。
  • size():返回队列中元素的数量。
  • swap(other):交换两个队列的内容。

std::priority_queue

  • 特性 :std::priority_queue 是一个容器适配器,它提供了一个优先级队列,元素根据优先级出队,而不是按照它们被添加的顺序。
  • 受限访问:只允许访问队首元素,即优先级最高的元素。
  • 底层容器 :通常使用 std::vector 作为底层容器,并以最大堆的形式组织元素,但用户无法直接访问这些容器。
  • 使用场景:适合需要根据优先级处理元素的场合,如任务调度、事件驱动模拟、Dijkstra 算法等。

std::priority_queue 的常用函数:

  • push(value):在优先级队列中插入一个新元素。
  • pop():移除优先级最高的元素(通常位于队首)。
  • top():访问优先级最高的元素。
  • empty():检查优先级队列是否为空。
  • size():返回优先级队列中元素的数量。
  • swap(other):交换两个优先级队列的内容。

区别总结

  • 访问方式 :std::deque 支持两端和中间的随机访问,std::queue 和 std::priority_queue 只允许访问队首元素。
  • 元素顺序 :std::queue 按照先进先出的顺序处理元素,std::priority_queue 根据元素的优先级处理元素,而 std::deque 不维护元素的特定顺序。
  • 底层实现 :std::deque 通常由多个数组块组成,std::queue 和 std::priority_queue 通常使用 std::deque、std::vector 或 std::list 作为底层容器,但这些底层容器对用户是隐藏的。
  • 适用场景:根据需要的数据结构特性选择合适的容器或容器适配器。
相关推荐
大江东去浪淘尽千古风流人物6 天前
【HexVIO】DSP卸载双目惯性VIO:Hexagon向量化前端与单帧融合调度深度解析
前端·状态模式·slam·dsp·vio·hexagon·移动端加速
吃一碗粉只付一碗钱6 天前
12-给SPA友好的401和403响应
c#·状态模式
sunlifenger7 天前
嵌入式部署,解锁张家港智慧灯杆的“极简组网”密码
科技·状态模式
上火的金鱼妹8 天前
关于多进程sse连接通知的实战
javascript·状态模式·sse
阿俊-全栈开发8 天前
LikeShop 小程序商城首页可配置弹窗的设计与实现(Java + uni-app)
小程序·状态模式·likeshop·likeshop开源商城
lingyubb9 天前
配音工具怎么选?从 TTS 合成链路看 6 个可量化参数
状态模式
平头哥技术团队10 天前
从预订问到退房:一间山野民宿的数字人「旅程地图」——Theme07_Homestay.vue 端到端拆解
状态模式·数字人
未来之窗软件服务11 天前
web网络请求竞态问题与取消方案-东方仙盟
前端·状态模式·仙盟创梦ide·东方仙盟·网络取消
一级新生12 天前
多智能体协作:常用协作模式详解
人工智能·状态模式·agent·多智能体·智能体