news 2026/6/10 18:04:22

C++STL容器:高效编程必备指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++STL容器:高效编程必备指南

好的,我们来学习C++ STL中最常用的几种容器。STL(Standard Template Library)提供了多种高效的容器类型,用于存储和管理数据。


1.vector:动态数组

  • 概念:可变大小的数组,支持随机访问(通过下标 $i$)。
  • 适用场景:需要频繁访问元素,尾部插入/删除较多时。
  • 基本操作
    #include <vector> std::vector<int> vec; // 创建空vector vec.push_back(10); // 尾部插入元素 int x = vec[0]; // 访问元素(需确保下标有效) vec.pop_back(); // 删除尾部元素 size_t len = vec.size(); // 获取元素数量

2.list:双向链表

  • 概念:元素通过指针双向链接,插入/删除效率高,但不支持随机访问。
  • 适用场景:频繁在任意位置插入/删除。
  • 基本操作
    #include <list> std::list<int> lst; lst.push_back(20); // 尾部插入 lst.push_front(5); // 头部插入 lst.pop_front(); // 删除头部元素 auto it = lst.begin(); // 获取迭代器(指向首元素) ++it; // 移动迭代器

3.map:有序键值对

  • 概念:基于红黑树实现,按键排序(默认升序),键唯一。
  • 适用场景:需通过键快速查找/更新值。
  • 基本操作
    #include <map> std::map<std::string, int> scores; scores["Alice"] = 90; // 插入或更新键值对 auto it = scores.find("Bob"); // 查找键(返回迭代器) if (it != scores.end()) { int score = it->second; // 获取值 } scores.erase("Alice"); // 删除键值对

4.set:有序唯一值集合

  • 概念:存储唯一值并自动排序。
  • 适用场景:去重或有序集合操作。
  • 基本操作
    #include <set> std::set<int> uniqueNums; uniqueNums.insert(42); // 插入元素 if (uniqueNums.count(42)) { // 检查元素是否存在 uniqueNums.erase(42); // 删除元素 }

5.queue:队列(FIFO)

  • 概念:先进先出,只允许在队尾插入、队首删除。
  • 适用场景:任务调度、广度优先搜索。
  • 基本操作
    #include <queue> std::queue<int> q; q.push(10); // 入队 int front = q.front(); // 访问队首 q.pop(); // 出队

迭代器遍历(通用)

所有容器均支持迭代器遍历:

std::vector<int> vec = {1, 2, 3}; for (auto it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " "; // 输出:1 2 3 }

总结

容器特点时间复杂度(平均)
vector动态数组,随机访问尾部插入 $O(1)$
list双向链表任意插入 $O(1)$
map键值对,有序查找 $O(\log n)$
set唯一值集合,有序插入 $O(\log n)$
queue先进先出入队/出队 $O(1)$

选择合适的容器能大幅提升代码效率和可读性!

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

SSM毕设项目推荐-基于SSM+MySQL的网上商城系统开发基于SSM的网络商城【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/9 23:56:13

Excel遗珠:揭秘宏表函数GET.WORKBOOK,一键获取所有工作表名

在Excel中&#xff0c;你是否曾为无法直接获取所有工作表名而烦恼&#xff1f;VBA虽强大但门槛高&#xff0c;公式函数又似乎无能为力。其实&#xff0c;Excel中隐藏着一类被称为“宏表函数”的强大工具&#xff0c;其中GET.WORKBOOK能轻松解决这一难题。 在Excel的进化长河中&…

作者头像 李华
网站建设 2026/6/10 5:41:59

科研级置信区间(CI)曲线可视化实战(Matplotlib)

在学术研究与统计分析中&#xff0c;置信区间&#xff08;Confidence Interval, CI&#xff09; 是描述参数估计不确定性与统计可靠性的核心指标。相比标准差&#xff08;SD&#xff09;与标准误&#xff08;SEM&#xff09;&#xff0c;CI 直接对应统计推断问题&#xff0c;更…

作者头像 李华
网站建设 2026/6/9 15:16:25

Java静态与终极:static和final详解

好的&#xff01;下面用简单易懂的方式解释 Java 中的 static 和 final 关键字&#xff1a; 1. static 关键字 static 表示 "静态的"&#xff0c;用于修饰成员&#xff08;变量、方法、代码块&#xff09;。它意味着该成员属于类本身&#xff0c;而不是类的某个实例…

作者头像 李华
网站建设 2026/6/9 18:44:40

运维人的尽头,只能是无休止的“救火”吗?

回想元旦放假第一天&#xff0c;热腾腾的早餐刚端上桌&#xff0c;手机微信的提示音就炸响了——客户发来急报&#xff1a;电子票据数据库 CPU 爆表&#xff01;那一瞬间&#xff0c;一股凉意直冲脊梁。 我不由得苦笑&#xff0c;上次是国庆&#xff0c;这次是元旦。多少次了&a…

作者头像 李华
网站建设 2026/6/10 14:13:03

数字滤波器设计中的精度问题

一、数字滤波器的误差源 数字滤波器不论是用物理硬件方法还是用计算机程序实现,都会由于字长的限制而产生误差,误差的原因一般可归纳为3种类型。 第一是由于滤波器系数表达精度有限引起的,它对所求的滤波器的传递特性和稳定性均有影响。由于非递归滤波器没有反馈结构,因此不…

作者头像 李华