mirror of
https://github.com/PKUFlyingPig/cs-self-learning.git
synced 2026-06-24 18:36:57 +08:00
50 lines
2.9 KiB
Markdown
50 lines
2.9 KiB
Markdown
# CS106L: Standard C++ Programming
|
||
|
||
## 课程简介
|
||
|
||
- 所属大学:Stanford
|
||
- 先修要求:最好掌握至少一门编程语言
|
||
- 编程语言:C++
|
||
- 课程难度:🌟🌟🌟
|
||
- 预计学时:20 小时
|
||
|
||
我从大一开始一直都是写的 C++ 代码,直到学完这门课我才意识到,我写的 C++ 代码大概只是 C 语言 + `cin`/`cout` 而已。
|
||
|
||
这门课会深入到很多标准 C++ 的特性和语法,让你编写出高质量的 C++ 代码。例如 auto binding, uniform initialization, lambda function, move semantics,RAII 等技巧都在我此后的代码生涯中被反复用到,非常实用。
|
||
|
||
值得一提的是,这门课的作业里你会实现一个 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) 中。
|