7.1 KiB
7.1 KiB
学完 std
,你基本上已经掌握了 C++ 标准库的核心内容。但如果你想系统地掌握 C++,不仅仅是 std
,还包括以下几个大的模块/主题:
✅ 一、C++ 标准库(Standard Library)
这是你正在学的内容,包括:
1. STL(Standard Template Library)💡
- 容器(
vector
,list
,map
,set
, …) - 算法(
sort
,find
,for_each
, …) - 迭代器(
iterator
,reverse_iterator
, …) - 函数对象(
std::less
,std::greater
, …) - 配接器(
stack
,queue
,priority_queue
) - 分配器(了解即可)
2. 其他 std 模块 ✨
- 智能指针(
shared_ptr
,unique_ptr
,weak_ptr
) - 时间库(
<chrono>
) - 文件和 IO 流(
<fstream>
,<iostream>
,<sstream>
) - 字符串处理(
std::string
,std::string_view
, …) - 正则表达式(
<regex>
) - 并发支持(
<thread>
,std::mutex
,std::atomic
, …) - 错误处理(异常
try/catch
,<stdexcept>
,error_code
) - 数值库(
<cmath>
,<numeric>
,<random>
) - 元编程和类型特性(
<type_traits>
,std::enable_if
,std::is_same
等)
✅ 二、C++ 语言特性(不是库,是语法层面的东西)
- 基本语法(变量、函数、控制流)
- 面向对象(类、继承、多态、虚函数)
- 模板(函数模板、类模板、模板特化、SFINAE)
- Lambda 表达式
- 异常处理(
try-catch
) - 引用、指针、智能指针
- constexpr、auto、decltype、range-based for、结构化绑定(C++17)
- 类型推导与
decltype(auto)
- Rvalue 引用和移动语义(C++11+)
- 协程(C++20)
✅ 三、现代 C++ 标准版本
- C++98/03:经典 STL
- C++11:智能指针、
auto
、nullptr
、Lambda、std::thread
- C++14:泛型 Lambda、返回类型推导
- C++17:结构化绑定、
if constexpr
、std::optional
- C++20:协程、concepts、ranges、
std::format
- C++23:
std::expected
,std::mdspan
, 模块化初步
✅ 四、第三方库(超越 std 的工具)
虽然不是 std
,但你之后可以学:
- Boost(准标准库,很多后来被 C++ 标准采纳)
- fmt(现代格式化库,比
printf
和std::cout
更强) - spdlog(日志库)
- Eigen / Armadillo(矩阵运算)
- Qt(GUI 和跨平台开发)
- OpenCV(图像处理)
- JSON for Modern C++(
nlohmann::json
)
✅ 五、其他知识
- 构建工具(CMake)
- 编译过程和链接过程
- 单元测试(如 Google Test)
- 性能优化(内存、CPU、并发)
- 调试技巧(GDB, Valgrind, Visual Studio 等)
✅ 六、实战项目建议
- 数据结构与算法练习(如 LeetCode)
- 实现一个简单的 web server(理解并发)
- 编写一个图形界面工具(用 Qt)
- 实现一个简易数据库(理解数据结构、文件操作)
- 游戏开发小项目
如果你想,我可以为你规划一个完整的学习路径,从 std
到现代 C++ 实战。是否需要?
很好,我们将为你规划一个从 std
到现代 C++ 实战的完整学习路径。这个路径将涵盖:
- C++ 标准库(
std
) - 现代 C++ 特性(C++11~C++23)
- 实战技能与项目能力提升
- 与操作系统、硬件、网络等系统知识的衔接(进阶)
- 职业级开发者所需的软/硬技能
🧭 阶段 1:掌握 C++ 标准库(std
)
1. 容器(Containers)
- 顺序容器:
vector
,deque
,list
,array
,forward_list
- 关联容器:
set
,multiset
,map
,multimap
- 无序关联容器:
unordered_set
,unordered_multiset
,unordered_map
,unordered_multimap
- 容器适配器:
stack
,queue
,priority_queue
2. 迭代器(Iterators)
- 输入、输出、前向、双向、随机访问迭代器
iterator_traits
,reverse_iterator
,insert_iterator
等适配器begin()
,end()
,rbegin()
,rend()
3. 算法( 与 )
- 非变异算法:
find
,count
,all_of
,any_of
,none_of
等 - 变异算法:
sort
,reverse
,rotate
,partition
,unique
等 - 数值算法:
accumulate
,inner_product
,iota
等
4. 函数对象与 Lambda
std::function
,std::bind
,std::ref
- lambda 表达式捕获、泛型 lambda
- 比较器、自定义函数对象
5. 字符串与字符串流
std::string
,std::wstring
std::stringstream
,std::ostringstream
,std::istringstream
6. 时间与日期()
std::chrono::duration
,system_clock
,steady_clock
sleep_for
,sleep_until
7. 智能指针
std::unique_ptr
,std::shared_ptr
,std::weak_ptr
make_unique
,make_shared
8. 输入输出()
std::cin
,std::cout
,std::cerr
,std::getline
- 文件 I/O:
<fstream>
9. 异常处理
try
,catch
,throw
std::exception
, 自定义异常类
10. 其他有用工具
<tuple>
,<pair>
,<optional>
,<variant>
<bitset>
,<array>
,<any>
,<stacktrace>
,<source_location>
<memory>
,<type_traits>
,<limits>
,<functional>
,<utility>
🚀 阶段 2:现代 C++(C++11 - C++23)
1. C++11
auto
,nullptr
,enum class
- 右值引用与移动语义
std::thread
,std::mutex
,std::atomic
lambda
,range-based for
,initializer_list
constexpr
,static_assert
2. C++14
- 泛型 lambda(auto 参数)
std::make_unique
- 二进制字面量、返回类型推导(
auto f() -> int
)
3. C++17
std::optional
,std::variant
,std::string_view
- if constexpr, structured bindings (
auto [a, b] = ...
) - 内联变量
inline static
4. C++20
- 协程(
co_await
,co_yield
,co_return
) - ranges 库:
std::ranges::views::filter
,transform
- 概念(Concepts):
requires
- 模块化支持、三向比较
<=>
5. C++23
std::expected
,mdspan
,stacktrace
,std::print
- 扩展的 ranges 和协程支持
- 模块进一步优化
🧪 阶段 3:C++ 实战能力构建
小项目建议
- 学生管理系统(用 map 和 vector 实现)
- 快速文件搜索器(使用 unordered_map 和正则表达式)
- 图形化贪吃蛇(用 SDL + C++)
- 简易 Web 服务器(socket + 多线程)
实战技能
- 调试:GDB、Visual Studio Debug、Valgrind
- 构建系统:Makefile, CMake
- 测试框架:GoogleTest, Catch2
- 性能分析:perf, gprof, cppcheck
- 代码风格:ClangFormat, Git + Lint
🧱 阶段 4:系统层知识融合(进阶)
- 操作系统原理
- 内存管理 / 虚拟内存
- 线程、协程与并发模型
- 计算机网络(Socket、HTTP 协议)
- C++ 与汇编互操作(内联汇编)
- 现代架构与设计模式(SOLID、MVC)
🧑💻 阶段 5:面向职业开发
- 项目经验 + 开源贡献(GitHub)
- LeetCode、牛客刷题(加强算法)
- 简历准备 + 面试训练
- 学习 Rust/Go/Python 等现代语言进行对比
如果你希望,我可以按这个路径,逐阶段为你布置学习计划,每一阶段配上知识点 + 练习 + 小项目,帮助你掌握并实践。
是否希望我从【阶段 1:std 学习计划】开始布置?