news 2026/8/29 6:23:18

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/8/22 20:34:35

Java新手必看:快速配置环境与首个程序

Java环境配置与第一个程序 1. 下载JDK 访问Oracle官网或OpenJDK&#xff08;推荐OpenJDK&#xff09;。选择与操作系统匹配的版本&#xff08;如Windows x64 Installer&#xff09;。 2. 安装JDK 双击安装包&#xff0c;按提示完成安装&#xff08;记录安装路径&#xff0c…

作者头像 李华
网站建设 2026/8/23 10:47:28

SpringBoot4.0+JDK25+GraalVM:云原生新纪元

好的&#xff0c;这是一个结合了 Spring Boot 4.0&#xff08;假设版本&#xff09;、未来的 JDK 25 以及 GraalVM 的前沿技术组合&#xff0c;代表了 Java 云原生应用的演进方向。让我们逐步分析其关键特性和架构优势&#xff1a; 1. Spring Boot 4.0&#xff1a;应用框架的进…

作者头像 李华
网站建设 2026/8/21 13:14:07

用Python实现第一个量子机器学习模型完整教程:Qiskit与TensorFlow集成

——手把手代码教学与常见问题解决方案 作者:DREAMVFIA UNION 发布日期:2026年2月1日 版权:© 2026 DREAMVFIA UNION -------------------------------------------------- 目录 1. 第一章:引言——为什么学习量子机器学习 2. 第二章:量子计算基础回顾 3. 第三章…

作者头像 李华
网站建设 2026/8/20 18:35:50

U654615 比特聚集(bit)补题报告

先看题目&#xff1a;题目分析我们有一个长度为 的二进制字符串 &#xff0c;包含字符 0 和 1&#xff0c;至少有一个 1。 可以交换相邻字符&#xff0c;每次交换算一次操作。 目标&#xff1a;让所有 1 连续排列&#xff08;形成一段连续的 1&#xff09;。 求最少操作次数思…

作者头像 李华
网站建设 2026/8/23 17:59:39

AI大模型基于LangChain 进行RAG与Agent智能体开发

大模型&#xff0c;英文名叫Large Model&#xff0c;大型模型。早期的时候&#xff0c;也叫Foundation Model&#xff0c;基础模型。 大模型是一个简称&#xff0c;完整的叫法&#xff0c;应该是“人工智能预训练大模型”。预训练&#xff0c;是一项技术&#xff0c;我们后面再…

作者头像 李华
网站建设 2026/8/28 17:26:16

开题报告-基于BS的在线电影视频播放系统的设计与实现

目录 研究背景与意义系统核心功能技术选型创新点设计预期成果应用价值 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 研究背景与意义 在线电影视频播放系统基于B/S架构&#xff08;Browser/Server&…

作者头像 李华