Skip to main content

C++ STL Engineering Roadmap

From STL API Use to Source-Level Containers, Algorithms, and Engineering Judgment

Part 1: C++ Low-Level Foundations

Chapter 1: C++ Object Model

Chapter 2: Object Lifetime

Chapter 3: Move Semantics and Rvalue References

Chapter 4: Memory Management

Chapter 5: Template Foundations

Part 2: STL Core Mechanisms

Chapter 6: Iterator System

Chapter 7: Allocator System

Chapter 8: Generic Algorithm Design

Chapter 9: Exception Safety

Part 3: Sequence Containers

Chapter 10: Vector

Chapter 11: Array

Chapter 12: Deque

Chapter 13: List

Chapter 14: Forward List

Chapter 15: String

Part 4: Ordered Associative Containers

Chapter 16: Red-Black Tree Foundations

Chapter 17: Map and Set

Chapter 18: Multimap and Multiset

Part 5: Unordered Hash Containers

Chapter 19: Hash Table Foundations

Chapter 20: Unordered Map and Unordered Set

Chapter 21: Unordered Multimap and Unordered Multiset

Part 6: Container Adaptors

Chapter 22: Stack

Chapter 23: Queue

Chapter 24: Priority Queue

Part 7: STL Algorithms

Chapter 25: Algorithm Design Principles

Chapter 26: Search Algorithms

Chapter 27: Modifying Algorithms

Chapter 28: Sorting Algorithms

Chapter 29: Binary Search Algorithms

Chapter 30: Set Algorithms

Chapter 31: Heap Algorithms

Chapter 32: Numeric Algorithms

Part 8: Callable Objects and Invocation

Chapter 33: Function Objects

Chapter 34: Lambda Expressions

Chapter 35: Std Function

Chapter 36: Bind Mem Fn and Invoke

Part 9: Traits and Template Metaprogramming

Chapter 37: Traits Design

Chapter 38: Iterator Traits

  • 38.1 iterator_traits 作用(说明算法如何通过统一入口读取 iterator 的值类型、距离类型和能力标签)
  • 38.2 value_type(说明迭代器解引用结果背后的元素类型如何参与临时对象和算法返回类型)
  • 38.3 difference_type(整理两个位置之间距离如何影响 advance、distance 和随机访问运算)
  • 38.4 pointer(说明 iterator 暴露指针类型时与原生指针、代理对象和 contiguous iterator 的关系)
  • 38.5 reference(区分真实引用和 proxy reference 对赋值、比较和生命周期的影响)
  • 38.6 iterator_category(说明旧式 iterator category 如何表达算法可使用的最强操作集合)
  • 38.7 指针特化(说明原生指针如何通过 traits 特化进入 STL iterator 体系)
  • 38.8 算法如何通过 traits 获取 iterator 能力(追踪算法如何根据 iterator 能力选择线性推进、随机跳转或优化路径)

Chapter 39: Type Traits

Chapter 40: SFINAE

Chapter 41: Concepts

Part 10: Modern STL

Chapter 42: Ranges

Chapter 43: Views

Chapter 44: Span

Chapter 45: String View

Chapter 46: PMR

Chapter 47: Constexpr STL

Part 11: Mini STL Implementation

Chapter 48: Mini Allocator

Chapter 49: Mini Iterator

Chapter 50: Mini Vector

Chapter 51: Mini List

  • 51.1 node 结构(定义 prev、next、value 和哨兵节点如何共同形成双向链表不变量)
  • 51.2 iterator(实现节点指针包装、双向移动、解引用和端点比较)
  • 51.3 insert(追踪节点分配、元素构造和四个指针重连的提交顺序)
  • 51.4 erase(说明断链、析构、释放和返回后继 iterator 的责任)
  • 51.5 splice(追踪不移动元素值的节点区间转移路径)
  • 51.6 clear(说明整表销毁如何遍历节点并保持哨兵恢复为空状态)
  • 51.7 allocator 参与(说明节点分配、对象构造和异常失败清理如何接入 allocator)

Chapter 52: Mini Deque

  • 52.1 map 结构(定义控制数组如何保存 block 指针并支撑两端扩展)
  • 52.2 block 结构(说明固定大小缓冲块如何承载局部连续元素)
  • 52.3 iterator(实现当前元素指针、block 边界和控制数组位置之间的状态关系)
  • 52.4 push_front(追踪前端预留、块切换、元素构造和 begin 更新)
  • 52.5 push_back(追踪尾端容量、块分配、元素构造和 end 更新)
  • 52.6 pop_front(说明前端元素销毁、块释放条件和 begin 推进)
  • 52.7 pop_back(说明尾端元素销毁、块释放条件和 end 回退)
  • 52.8 random access(把下标计算整理成块编号、块内偏移和 iterator 跳转)

Chapter 53: Mini Red-Black Tree

  • 53.1 node 结构(定义 key/value、parent、left、right、color 和哨兵如何形成树节点状态)
  • 53.2 rotate_left(说明左旋如何局部改变父子关系并保持中序顺序)
  • 53.3 rotate_right(说明右旋如何与左旋对称地修复局部结构)
  • 53.4 insert(追踪二叉搜索插入位置、节点构造和初始颜色设置)
  • 53.5 insert_fixup(整理插入后通过变色、旋转和根节点约束恢复红黑性质)
  • 53.6 erase(说明删除节点、替换后继和修复黑高的关键路径)
  • 53.7 iterator(实现有序遍历中的 successor、predecessor 和端点行为)
  • 53.8 lower_bound(追踪树搜索如何记录候选节点并返回第一个不小于 key 的位置)

Chapter 54: Mini Hash Table

  • 54.1 bucket array(定义桶数组如何把 hash value 映射到链表入口)
  • 54.2 node 结构(说明节点如何保存 key/value、next 指针和可选缓存 hash)
  • 54.3 hash(整理哈希函数、取模或掩码定位和 key_equal 的配合关系)
  • 54.4 insert(追踪定位 bucket、检查等价键、构造节点和挂链的顺序)
  • 54.5 find(说明查找如何先定位 bucket,再在冲突链中比较 key)
  • 54.6 erase(说明删除如何维护前驱指针、销毁节点并更新元素数量)
  • 54.7 rehash(追踪桶数组扩容、节点重新分配到桶和 iterator 失效)
  • 54.8 load_factor(说明负载因子如何触发扩容并影响平均查找成本)

Chapter 55: Mini Algorithm

  • 55.1 find(实现线性扫描、谓词比较和未找到返回 last 的基本算法形状)
  • 55.2 copy(实现从输入区间到输出区间的逐元素写入,并说明重叠边界)
  • 55.3 move(实现移动赋值路径,并区分元素状态转移和存储位置不变)
  • 55.4 lower_bound(实现基于半开区间的二分收缩,并说明 iterator 能力对成本的影响)
  • 55.5 sort 简化版(选择一个最小排序策略,说明比较器、交换和复杂度边界)
  • 55.6 tag dispatch(用 iterator category 选择不同实现入口)
  • 55.7 iterator category 优化(比较普通线性路径和随机访问优化路径的触发条件)

Part 12: Engineering Practice and Source Reading

Chapter 56: STL Performance Model

Chapter 57: Container Selection Principles

Chapter 58: Common STL Mistakes

Chapter 59: STL Source Reading Method

Chapter 60: STL Synthesis