news 2026/5/3 21:14:29

C++ STL 容器 + 算法 完整版精讲

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ STL 容器 + 算法 完整版精讲

一、STL 整体组成

STL 六大组件:容器、算法、迭代器、仿函数、适配器、空间配置器

核心就两块:容器存数据,算法做处理,迭代器当桥梁


二、STL 容器分类(三大类)

1. 序列式容器(有序、可重复)

底层是线性结构,元素按插入顺序排列

表格

容器底层结构特点
vector动态数组随机访问快,尾部增删快,中间插入慢
list双向循环链表任意位置插入删除快,不支持随机访问
deque分段动态数组头尾都快,支持随机访问
array静态数组固定大小,比原生数组更安全
forward_list单向链表更省内存,只能从头遍历

记忆:vector 连续数组、list 链表、deque 双端队列

2. 关联式容器(自动排序、键值唯一)

底层红黑树,自动按 key 排序,查找效率高 O (logn)

表格

容器底层特点
set红黑树元素唯一、自动升序、不可改 key
multiset红黑树允许元素重复、自动排序
map红黑树key 唯一,key-value 映射
multimap红黑树key 允许重复

3. 无序关联容器(哈希表)

底层哈希表,元素无序,查找更快 O (1)

表格

容器底层
unordered_set哈希表
unordered_multiset哈希表
unordered_map哈希表
unordered_multimap哈希表

区别:

  • map/set:红黑树、有序、稳定
  • unordered_map/set:哈希、无序、查找更快

三、容器高频考点总结

  1. vector 和 list 区别
  • vector:连续内存、支持随机访问、扩容拷贝、中间插入慢
  • list:链表结构、不随机访问、任意位置插入删除快、无扩容
  1. map vs unordered_map
  • map:红黑树,有序,遍历有序,稍慢
  • unordered_map:哈希表,无序,查找更快,可能哈希冲突
  1. 迭代器失效
  • vector:新增元素、扩容、删除中间元素会迭代器失效
  • list:删除当前迭代器,其他迭代器不失效

四、STL 常用算法(分类记忆)

1. 遍历 / 查找

  • for_each遍历
  • find按值查找
  • find_if条件查找
  • binary_search二分查找(必须有序)

2. 排序 / 打乱

  • sort快速排序
  • stable_sort稳定排序
  • reverse反转
  • shuffle随机打乱

3. 最值 / 计数

  • max_element最大值
  • min_element最小值
  • count统计个数
  • count_if条件统计

4. 去重 / 替换 / 拷贝

  • unique去重(先排序)
  • replace替换元素
  • remove删除元素
  • copy容器拷贝

5. 集合操作(有序容器)

  • set_union 并集
  • set_intersection 交集
  • set_difference 差集

五、使用套路模板

  1. 选容器:

    • 要随机访问 → vector
    • 频繁插入删除 → list
    • 键值映射且有序 → map
    • 键值映射要快 → unordered_map
  2. 用算法:配合迭代器 + Lambda,一行搞定过滤、排序、遍历

示例:

cpp

运行

vector<int> v = {5,2,8,1}; sort(v.begin(), v.end()); // 排序 for_each(v.begin(), v.end(), [](int x){cout<<x;});

六、极简背诵口诀

序列容器:vector 数组、list 链表、deque 双端关联容器:map/set 红黑树,自动有序无序容器:unordered 哈希表,查找最快STL 算法:排序、查找、遍历、去重、最值全覆盖

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

macos 26.2 将微信安装到移动硬盘

一、前言 之前参考https://blog.csdn.net/qq_39921135/article/details/146149096文章把微信迁移到了外接磁盘&#xff0c;内置硬盘秒变小很多&#xff0c;看到磁盘变小了&#xff0c;手贱从 macOS 14.4.1 -> macOS 26.2 ,中间两年没更新系统了&#xff0c;更新完26.2就后…

作者头像 李华
网站建设 2026/5/3 21:07:25

Python模型配置“幽灵bug”终极排查法:从__dict__污染到BaseSettings缓存陷阱(仅限内部团队流传的7层调用栈分析法)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Python模型配置的隐性风险全景图 Python 模型配置看似简单&#xff0c;实则潜藏大量易被忽视的隐性风险——从环境依赖冲突到序列化不兼容&#xff0c;从硬编码路径泄露到配置加载顺序错误&#xff0c;…

作者头像 李华
网站建设 2026/5/3 21:04:26

三步开启本地弹幕视频新时代:BiliLocal终极使用指南

三步开启本地弹幕视频新时代&#xff1a;BiliLocal终极使用指南 【免费下载链接】BiliLocal add danmaku to local videos 项目地址: https://gitcode.com/gh_mirrors/bi/BiliLocal 还在为离线观看视频时缺少弹幕互动而烦恼吗&#xff1f;BiliLocal本地弹幕播放器正是你…

作者头像 李华
网站建设 2026/5/3 20:50:26

利用 Taotoken 实现多模型 API 密钥的统一管理与访问控制

利用 Taotoken 实现多模型 API 密钥的统一管理与访问控制 1. 多模型密钥管理的核心挑战 在中大型项目或企业环境中&#xff0c;不同团队或项目往往需要访问不同的大模型能力。传统模式下&#xff0c;每个团队单独管理自己的 API 密钥会导致以下问题&#xff1a;密钥分散难以追…

作者头像 李华