# learn_stl **Repository Path**: thammer/learn_stl ## Basic Information - **Project Name**: learn_stl - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-30 - **Last Updated**: 2026-06-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STL 学习项目 本项目是一个系统化的 C++ 标准模板库(STL)学习教程,通过 11 个阶段的渐进式学习,帮助开发者深入理解 STL 的核心概念与实际应用。 ## 项目简介 本项目采用「理论讲解 + 代码演示」的方式,覆盖从基础的模板语法到高级的内存管理主题。每个阶段都包含详细的知识点讲解和配套练习,帮助学习者建立完整的 STL 知识体系。 ## 项目结构 ``` learn_stl/ ├── 00_templates/ # 第 0 阶段:模板基础 ├── 01_raii/ # 第 1 阶段:RAII 升级 ├── 02_lambda/ # 第 2 阶段:Lambda 与 std::function ├── 03_sequence/ # 第 3 阶段:序列容器 ├── 04_optional_variant/ # 第 4 阶段:std::optional 与 std::variant ├── 05_iterators/ # 第 5 阶段:迭代器 ├── 06_algorithms/ # 第 6 阶段:算法 ├── 07_associative/ # 第 7 阶段:关联容器 ├── 08_adapters_chrono/ # 第 8 阶段:适配器与 chrono ├── 09_allocators/ # 第 9 阶段:分配器与内存 └── 10_advanced/ # 第 10 阶段:高级主题(选学) ``` ## 阶段概览 | 阶段 | 主题 | 核心知识点 | |------|------|-----------| | 0 | 模板基础 | 函数模板、类模板、CTAD、特化、constexpr、explicit、type_traits | | 1 | RAII 升级 | Rule of Five、移动语义、unique_ptr、shared_ptr、weak_ptr、noexcept | | 2 | Lambda | Lambda 表达式、捕获语义、std::function、回调模式 | | 3 | 序列容器 | vector、string、array、deque、list、forward_list、span、initializer_list | | 4 | 可选与变体 | std::optional、std::variant、std::visit | | 5 | 迭代器 | 五种迭代器类别、iterator_traits、失效规则 | | 6 | 算法 | 非修改算法、修改算法、排序算法、二分查找、Erase-Remove | | 7 | 关联容器 | pair/tuple、map/set、unordered_map/set、容器选择 | | 8 | 适配器与 chrono | stack、queue、priority_queue、duration、计时 | | 9 | 分配器与内存 | std::allocator、自定义分配器、内存池、嵌入式 | | 10 | 高级主题 | string_view、Ranges、PMR、结构化绑定 | ## 快速开始 ### 环境要求 - C++ 编译器支持 C++17 或更高版本(推荐 C++20) - CMake 3.15+ ### 编译运行 ```bash mkdir build && cd build cmake .. make ./learn_stl ``` ### 学习建议 1. **循序渐进**:建议按阶段顺序学习,每阶段掌握后再进入下一阶段 2. **动手实践**:每个知识点都亲手编写代码验证 3. **完成练习**:每阶段的练习题是巩固知识的最佳方式 4. **查阅文档**:结合 cppreference.com 参考手册深化理解 ## 核心内容详解 ### 第 0 阶段:模板基础 重点掌握函数模板的显式/隐式实例化、类模板的成员函数按需实例化、模板特化(全特化/偏特化)、constexpr 与 const 的区别、以及 if constexpr 的编译期分支能力。 ### 第 1 阶段:RAII 升级 理解 Rule of Five(三/五/零)的拷贝控制语义,掌握右值引用与 std::move 的移动语义区分,熟练使用 unique_ptr 和 shared_ptr 管理资源,理解 noexcept 对容器扩容策略的影响。 ### 第 2 阶段:Lambda 与 std::function 掌握 Lambda 的基本语法和捕获语义(值捕获/引用捕获),理解 mutable 的作用,学会使用 std::function 实现类型擦除的回调模式。 ### 第 3 阶段:序列容器 深入理解 vector 的三指针内存模型和扩容机制、string 的 SSO 优化、deque 的分段连续结构、以及 list 不能使用 std::sort 的原因。 ### 第 4 阶段:std::optional 与 std::variant 掌握 optional 替代哨兵值的用法,理解 variant 作为类型安全的联合体的优势,学会使用 std::visit 对 variant 进行类型分派。 ### 第 5 阶段:迭代器 理解五种迭代器类别的能力分层,掌握 iterator_traits 的萃取机制,注意容器操作导致的迭代器失效问题。 ### 第 6 阶段:算法 熟悉区间约定的 `[first, last)` 模式,掌握常用算法的复杂度特性,学会使用 Erase-Remove 惯用法删除元素。 ### 第 7 阶段:关联容器 理解 map 的 operator[] 陷阱,了解红黑树与哈希表的底层差异,能够根据场景选择合适的容器。 ### 第 8 阶段:适配器与 chrono 掌握 stack/queue/priority_queue 的用法,理解 priority_queue 自定义比较器实现大顶堆/小顶堆,学会使用 chrono 进行精确计时。 ### 第 9 阶段:分配器与内存 了解默认分配器的两級分配机制,理解分配器接口要求,能够实现简单的固定大小内存池。 ### 第 10 阶段:高级主题 选学内容包括 string_view、Ranges、PMR 分配器、结构化绑定等现代 C++ 特性的深入应用。 ## 许可证 本项目仅供学习交流使用。 ## 参考资源 - [cppreference.com](https://en.cppreference.com/) - C++ 参考手册 - 《STL 源码剖析》- 侯捷 - 《Effective C++》- Scott Meyers - 《C++ Primer》- Lippman