news 2026/6/21 23:11:59

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/13 2:54:52

比话降AI使用教程:3步搞定知网AIGC检测

比话降AI使用教程&#xff1a;3步搞定知网AIGC检测 知网AI率超标&#xff0c;改来改去还是降不下来&#xff1f;其实方法很简单&#xff0c;用对工具三步就能搞定。 这篇教程手把手教你用比话降AI&#xff08;www.bihuapass.com&#xff09;处理论文&#xff0c;全程不超过20…

作者头像 李华
网站建设 2026/6/13 7:32:26

springboot基于安卓的智慧旅游向导app的设计与开发

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…

作者头像 李华
网站建设 2026/6/19 9:17:42

惊艳!提示工程架构师给出提示注入攻击防范新思路

惊艳&#xff01;提示工程架构师给出提示注入攻击防范新思路 关键词&#xff1a;提示工程、提示注入攻击、防范思路、大语言模型、安全机制、对抗训练 摘要&#xff1a;本文深入探讨了由提示工程架构师提出的提示注入攻击防范新思路。首先介绍提示工程的领域背景及提示注入攻…

作者头像 李华
网站建设 2026/6/16 7:32:43

JavaScript DOM操作实战:从入门到精通

JavaScript DOM 核心操作&#xff1a;从内容到节点的实战指南 一、内容操作 文本内容 textContent&#xff1a;获取或设置元素的纯文本内容 const element document.getElementById("demo"); console.log(element.textContent); // 获取内容 element.textContent …

作者头像 李华
网站建设 2026/6/18 7:58:38

linux genpool 学习

一、背景与引入在 Linux 内核中&#xff0c;内存管理并不只局限于伙伴系统&#xff08;buddy allocator&#xff09;和 slab/slub 分配器。在许多设备驱动、SoC 子系统以及共享内存场景中&#xff0c;开发者往往需要管理一块地址固定、大小有限、分配规则特殊的内存区域&#x…

作者头像 李华
网站建设 2026/6/13 0:34:51

Github源码推荐 | Prometheus:让自主无人机开发更简单、更高效!

在无人机开发领域&#xff0c;从飞控底层到上层应用的跨越往往面临着巨大的技术门槛。如何快速验证算法&#xff1f;如何平滑地从仿真过渡到真机&#xff1f; 今天为大家介绍一款由阿木实验室&#xff08;Amov Lab&#xff09; 维护的重磅开源项目——Prometheus。 &#x1f31…

作者头像 李华