news 2026/6/10 14:58:26

C++高效利器:优先级队列与反向迭代器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++高效利器:优先级队列与反向迭代器

好的,我们来深入探讨C++标准库中的两个重要特性:优先级队列(priority_queue反向迭代器(reverse_iterator。它们在处理特定问题时非常高效。


🧠 1. 优先级队列 (priority_queue)

优先级队列是一种特殊的队列,其元素按优先级出队,而非先进先出。在C++中,它通常基于(Heap)实现,位于<queue>头文件中。

核心特性
  • 自动排序:元素插入时根据比较规则自动调整位置。
  • 高效操作:插入和删除堆顶元素的时间复杂度为$O(\log n)$,访问堆顶元素为$O(1)$。
  • 自定义优先级:可通过比较函数(如greater<>或自定义仿函数)修改排序规则。
基本用法
#include <queue> #include <vector> #include <functional> int main() { // 默认大顶堆(降序) std::priority_queue<int> max_heap; // 小顶堆(升序) std::priority_queue<int, std::vector<int>, std::greater<int>> min_heap; // 插入元素 max_heap.push(3); max_heap.push(1); max_heap.push(4); // 访问堆顶(最大值) int top = max_heap.top(); // 4 // 删除堆顶 max_heap.pop(); // 移除4 }
典型场景
  • 任务调度(如按优先级处理任务)
  • 求Top K问题(如最大的K个数)
  • 哈夫曼编码等贪心算法

🔄 2. 反向迭代器 (reverse_iterator)

反向迭代器允许从容器的末尾向开头遍历,位于<iterator>头文件中。所有标准容器(如vectorlistdeque)均支持。

核心特性
  • 逆向遍历:通过rbegin()rend()获取反向迭代器。
  • 无缝衔接:与正向迭代器兼容,可直接用于算法(如std::sort)。
  • 适配器模式:底层通过适配正向迭代器实现。
基本用法
#include <vector> #include <iostream> int main() { std::vector<int> vec = {1, 2, 3, 4}; // 正向遍历 for (auto it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " "; // 1 2 3 4 } // 反向遍历 for (auto rit = vec.rbegin(); rit != vec.rend(); ++rit) { std::cout << *rit << " "; // 4 3 2 1 } }
典型场景
  • 逆序处理数据(如从后往前修改字符串)
  • 与算法结合(如std::copy到另一个容器的末尾)
  • 实现双向操作的数据结构

💡 组合使用示例

假设需要按升序输出最后K个最大值

#include <queue> #include <vector> #include <iostream> int main() { std::vector<int> data = {9, 3, 5, 2, 8}; int k = 3; // 小顶堆保存最大的K个数 std::priority_queue<int, std::vector<int>, std::greater<int>> pq; for (int num : data) { pq.push(num); if (pq.size() > k) pq.pop(); } // 用反向迭代器逆序输出(升序→降序) std::vector<int> result; while (!pq.empty()) { result.push_back(pq.top()); pq.pop(); } for (auto rit = result.rbegin(); rit != result.rend(); ++rit) { std::cout << *rit << " "; // 输出:9 8 5 } }

🧩 总结

工具作用核心优势
priority_queue动态维护优先级高效插入/删除堆顶元素
reverse_iterator逆向遍历容器简化逆序操作,兼容标准算法

掌握这两者,能大幅提升对C++容器复杂场景的处理能力。 🚀

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 21:11:32

嵌入式工控机如何接入远程USB摄像头:详细配置流程

嵌入式工控机如何真正“用好”远程USB摄像头:从踩坑到稳如磐石的实战手记 去年在某汽车焊装车间部署视觉定位系统时,我们把一台IMX8MP工控机塞进控制柜,而UVC摄像头却必须装在机械臂末端——离柜体足足7米远。现场布线师傅甩来一句:“USB线?别想了,3米都抖。”那一刻我才…

作者头像 李华
网站建设 2026/6/10 22:08:49

关键词匹配不准?试试MGeo地理语义对齐能力

关键词匹配不准&#xff1f;试试MGeo地理语义对齐能力 地址匹配这件事&#xff0c;听起来简单&#xff0c;做起来却常让人抓狂。你是不是也遇到过这些情况&#xff1a; 用户搜“杭州西湖文三路159号”&#xff0c;系统却只召回带“文三路”的结果&#xff0c;漏掉了“西湖区文…

作者头像 李华
网站建设 2026/5/30 14:59:05

物联网设备中nanopb与Protobuf对比:通俗解释

nanopb:在裸机MCU上跑通Protobuf的硬核实践 你有没有遇到过这样的场景? 在调试一款基于STM32L0的电池供电温湿度节点时,发现用 cJSON 解析一个 80 字节的 JSON 报文,光是 malloc 就占了 1.2KB 堆空间,而整块芯片只有 8KB RAM——更糟的是,三天后设备突然死机,串口只吐…

作者头像 李华
网站建设 2026/6/10 19:08:16

MusePublic CFG Scale调优:8-12区间对人物神态与背景协调性的实测

MusePublic CFG Scale调优&#xff1a;8-12区间对人物神态与背景协调性的实测 1. 为什么CFG Scale这个参数值得你花10分钟细看 你有没有遇到过这样的情况&#xff1a; 输入了一段精心打磨的提示词——“一位穿墨绿色丝绒长裙的东方女性&#xff0c;侧身站在雨后梧桐街角&…

作者头像 李华
网站建设 2026/5/3 9:47:37

基于ESP32的u8g2硬件抽象层实现:手把手教程

基于ESP32的u8g2硬件抽象层&#xff1a;从踩坑到量产的实战手记去年冬天调试一块SH1107 SPI OLED时&#xff0c;我连续三天卡在“屏幕只亮左半边”的问题上。示波器抓到CS信号毛刺&#xff0c;逻辑分析仪看到DC线在SPI传输中途被意外拉低——那一刻我才真正意识到&#xff1a;u…

作者头像 李华
网站建设 2026/5/30 15:29:32

分布式数据恢复—Ceph+TiDB数据恢复报告

一、Ceph故障表现 故障情况&#xff1a;客户设备为Ceph分布式存储系统&#xff0c;采用RBD&#xff08;RADOS Block Device&#xff09;作为块存储服务。Ceph集群由多个OSD&#xff08;Object Storage Daemon&#xff09;节点组成&#xff0c;数据通过CRUSH算法分布存储在多个物…

作者头像 李华