Skip to content

附录 D · 学习路径与备考规划 ​

面向已掌握 C++ 基础语法、准备系统学习 STL 的读者,给出知识地图、三阶段路径、10 天速通计划、自测清单与各级衔接建议。


一、知识地图 ​

第1章  STL 总览 ── 三大组件、容器分类、选型思维
   │
   ├─ 序列式 ── 第2章 vector(连续内存)→ 第3章 list(链表)→ 第4章 deque(分段连续)
   │
   ├─ 关联式 ── 第5章 set 系列(去重/有序)→ 第6章 map 系列(映射/统计)
   │
   ├─ 适配器 ── 第7章 stack(LIFO)→ 第8章 queue(FIFO/BFS)→ 第9章 priority_queue(堆/TopK)
   │
   └─ 基础工具 ── 第10章 pair(键值组合,map 的元素单位)

二、章序与学序 ​

  • 章序(本书编排):按容器分类,便于同类对比、横向查阅。
  • 学序(推荐学习):按难度由浅入深,pair → vector → stack → queue → list → deque → set → map → priority_queue。

两者不一致是刻意设计:第10章的 pair 概念最简单,却因属于"基础工具"而排在末章。首次学习请按学序跳读,复习查阅时再按章序。


三、三阶段学习路径 ​

第一阶段:会用(3~4 天) ​

目标:能独立写出各容器的增删改查,做对选择题。

天内容自测标准
1第10章 pair + 第2章 vector能默写 pair 的三种初始化、vector 的 5 个常用函数
2第7章 stack + 第8章 queue能手写括号匹配、能手写 BFS 框架
3第3章 list + 第4章 deque能说清三者(vector/list/deque)的区别与复杂度
4阶段自测:第1章实战练习 + 附录 B 一、二节五星考点能默写 80%

第二阶段:会选(3~4 天) ​

目标:拿到问题能选对容器,能做编程题。

天内容自测标准
5第5章 set 系列能说清四种 set 的差异与选型
6第6章 map 系列能独立写出 mp[x]++ 计数并按 key 输出
7第9章 priority_queue能写大顶堆与小顶堆,能解 TopK
8阶段自测:各章编程题 + 附录 B 第五节易错点 TOP 20易错点能主动规避

第三阶段:会优化(2~3 天) ​

目标:理解底层,能做复杂度分析与优化。

天内容自测标准
9各章"底层原理"小节 + 附录 B 第二节复杂度表能默画复杂度速查表
10综合练习:多容器配合(如 map + priority_queue、set + vector)能独立完成附录 D 第六节自测清单

四、10 天速通计划(每天 1.5~2 小时) ​

天上午 / 主学(60 min)下午 / 练习(40 min)睡前回顾(10 min)
1第1章 + 第10章 pair第10章练习pair 的字典序规则
2第2章 vector第2章练习扩容机制与迭代器失效
3第7章 stack第7章练习(括号匹配必做)pop 不返回值
4第8章 queue第8章练习(BFS 必做)队列清空的方式
5第3章 list + 第4章 deque第3、4章练习三者的复杂度对比表
6第5章 set 系列第5章练习四种 set 的选型
7第6章 map 系列第6章练习(统计类必做)[] 会自动插入
8第9章 priority_queue第9章练习(TopK 必做)大顶堆 vs 小顶堆写法
9附录 B 全部 + 各章速记卡第1章实战练习复杂度速查表
10错题重做附录 D 第六节自测清单必背速记卡

五、考场时间分配建议(含 STL 的编程题) ​

环节建议时间要点
审题与选型3~5 分钟先确定容器,再写算法;选型错了会全盘皆输
写代码15~20 分钟容器声明、头文件一次性写全
自测样例3~5 分钟必测空输入、单元素、最大值三种边界
检查复杂度2 分钟对照附录 B 第二节,确认不会超时

六、自测清单(能全部答出即可认为掌握) ​

概念层:

  1. 说出 STL 的三大组件及其作用。
  2. 说出序列式、关联式、容器适配器各包含哪些容器。
  3. 说出哪些容器支持随机访问、哪些支持迭代器、适配器为什么不支持遍历。

选型层:

  1. 频繁中间插入删除 → 选哪个容器?
  2. 需要按 key 计数且按 key 有序输出 → 选哪个容器?
  3. 需要每次取最小值 → 怎么写优先队列?
  4. 需要去重且不要求有序、数据量很大 → 选哪个容器?

复杂度层:

  1. 说出 vector、list、deque、set、unordered_map 的查找复杂度。
  2. 说出 priority_queue 的 push/pop 复杂度。
  3. 说出 vector 尾插的均摊复杂度及扩容代价。

排错层:

  1. pop() 为什么拿不到值?正确写法是什么?
  2. map[key] 访问不存在的 key 会发生什么?如何避免?
  3. unique() 之后还缺哪一步?
  4. 遍历时删除元素,迭代器该怎么写?
  5. 空容器调用 top() 会怎样?如何避免?

七、与 GESP 各级备考的衔接 ​

当前级别STL 学习重点配合册
备考四级只需 vector + pair + sortlevel4(排序算法)
备考五级加 stack、queue、了解 listlevel5(链表、递归、分治)
备考六级加 priority_queue、dequelevel6(树、搜索、栈与队列)
备考七级加 set、map、unordered_*level7(哈希表、图遍历、复杂 DP)
备考八级九种容器全通,重在复杂度与优化level8(图论、效率分析、算法优化)

向下衔接:若尚未掌握 C++ 基础语法(变量、循环、数组、函数、结构体),请先学 level1~level3,再回到本册。 向上延伸:本册只覆盖容器。STL 的算法(sort 进阶、next_permutation、nth_element 等)与字符串流(stringstream)在各级别册中结合具体算法讲解。


本规划为建议值,请按自己的实际进度调整;关键是每天都敲代码。

百炼成钢,融会贯通