cs-self-learning/docs/编程入门/cpp/CS106L.md
wendaining a3db7225c6
Update CS106L.md with Fall 2025 course changes
Added details about the Fall 2025 course updates and assignments.
2025-12-01 11:11:45 +08:00

50 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CS106L: Standard C++ Programming
## 课程简介
- 所属大学Stanford
- 先修要求:最好掌握至少一门编程语言
- 编程语言C++
- 课程难度:🌟🌟🌟
- 预计学时20 小时
我从大一开始一直都是写的 C++ 代码,直到学完这门课我才意识到,我写的 C++ 代码大概只是 C 语言 + `cin`/`cout` 而已。
这门课会深入到很多标准 C++ 的特性和语法,让你编写出高质量的 C++ 代码。例如 auto binding, uniform initialization, lambda function, move semanticsRAII 等技巧都在我此后的代码生涯中被反复用到,非常实用。
值得一提的是,这门课的作业里你会实现一个 HashMap类似于 STL 中的 `unordered_map`), 这个作业几乎把整个课程串联了起来,非常考验代码能力。特别是 `iterator` 的实现,做完这个作业我开始理解为什么 Linus 对 C/C++ 嗤之以鼻了,因为真的很难写对。
总的来讲这门课并不难但是信息量很大需要你在之后的开发实践中反复巩固。Stanford 之所以单开一门 C++ 的编程课,是因为它后续的很多 CS 课程 Project 都是基于 C++的。例如 CS144 计算机网络和 CS143 编译器。这两门课在本书中均有收录。
## 2025年秋更
随着modern C++的发展这门课也在与时俱进Fall25的版本与PKUFlyingPig的版本区别已经很大了主要是在Assignment方面
最近几年的版本基本都是有7个Assignments其中A0为Setup剩余6个为代码作业。每个代码作业都比较短小精悍提供了大部分的代码框架意在让学生简单实践上课所学的知识内容大致如下
1. 熟悉流对象操作,尤其是文件读取
2. STL容器以及指针操作
3. 简单的类的知识
4. 上手`std::ranges`以及`std::ranges::view`
5. 熟悉运算符的重载以及SMF
6. 认识`std::optional`
7. 实现一个简易的`unique_ptr`
课程的slides也很适合自学读slide+配合LLM问问题个人认为完全足够了。
## 课程资源
- 课程网站:<http://web.stanford.edu/class/cs106l/>
- 课程视频:<https://www.youtube.com/channel/UCSqr6y-eaQT_qZJVUm_4QxQ/playlists>
- 课程教材:<http://web.stanford.edu/class/cs106l/full_course_reader.pdf>
- Assignment1下载网址<https://github.com/snme/cs106L-assignment1>
- Assignment2下载网址<https://github.com/snme/cs106L-assignment2>
- 课程作业:具体内容见课程网站,我做的时候一共是两个:
1. 实现一个 WikiRacer 的小游戏
2. 实现一个类似 STL 库的 HashMap
## 资源汇总
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS106L - GitHub](https://github.com/PKUFlyingPig/CS106L) 中。
@wendaining 在学习这门课中用到的所有资源和作业实现都汇总在 [wendaining/cs106l_fa25 - GitHub](https://github.com/wendaining/cs106l_fa25) 中。