直接上手 vector 和 sort 能覆盖 80% 日常需求;优先用 vector(行为类似 c 数组、自动内存管理、支持三种遍历),仅记 push_back(),预留容量用 reserve(),访问用 at() 防越界;sort 与 find 基于迭代器,通用性强,适用于排序、查找等高频小任务。

直接上手 vector 和 sort 就能跑通 80% 的日常需求,不用先啃完所有容器和算法。
从 vector 开始写第一行 STL 代码
别从 list 或 deque 入手——它们的使用场景窄、接口易混淆,初学反而容易卡住。用 vector 最稳妥,它行为接近 C 风格数组,但自动管理内存,且支持范围 for、迭代器、下标访问三种遍历方式。
-
push_back()是唯一需要记住的插入方法;中间插入用insert()很慢,除非真有需求,否则跳过 - 初始化别写
vector<int> v(10)</int>(创建含 10 个 0 的 vector),容易误以为是预留容量;要预留空间用v.reserve(10) - 访问元素优先用
v.at(i)而非v[i]:前者带越界检查,调试期能立刻暴露错误
用 sort + find 解决真实小任务
排序和查找是高频刚需,sort 和 find 足够覆盖学生作业、脚本工具、配置解析等多数场景。它们不绑定具体容器,只认迭代器,所以学会一次,vector、list、array 全能套用。
-
sort(v.begin(), v.end())默认升序;降序加greater<int>()</int>或 lambda:[](int a, int b) { return a > b; } -
find(v.begin(), v.end(), 42)返回迭代器,必须和v.end()比较才能判断是否找到;别直接解引用 - 如果数据量小(unordered_set——建哈希表的开销可能比线性扫还高
避开三个新手典型陷阱
这些坑不会报编译错误,但会导致运行时崩溃或逻辑错乱,且极难定位。
- 迭代器失效:对
vector调用push_back()可能触发扩容,使所有已有迭代器、指针、引用全部失效;删元素用erase()后,返回的是新有效迭代器,不是原位置+1 - 混用不同容器的迭代器类型:不能把
list::iterator传给期待vector::iterator的函数,哪怕都是int类型——编译器会报错,但错误信息冗长,新手常看不懂 - 忽略头文件依赖:用
sort必须#include <algorithm></algorithm>,用vector要#include <vector></vector>,漏一个就编译失败;没有“万能头”(<bits></bits>非标准、禁用于正式项目)
真正卡住人的从来不是“该学哪个容器”,而是迭代器何时失效、算法参数顺序怎么记、错误信息里哪部分该盯住看——这些细节得在改 bug 时反复撞墙才能刻进肌肉记忆。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











