Skip to content

Stanford CS106L

Basic Information

来源:Stanford University

课程名称:CS106L, Standard C++ Programming (2020 Winter)

主题:C++ 语言 (C++ 20)

主要内容:19 个 Lecture, 3 个 Assignment

课程网站:https://web.stanford.edu/class/archive/cs/cs106l/cs106l.1204

个人实现:20Wi-CS106L-Stanford (Private 仓库,依要求不公开)

起止时间:2024.01 - 2024.01

Content

Assignments

该课程有三个 Assignment ,具体如下:

  • GraphViz: 通过模拟节点之间力的相互作用,将图清晰地可视化,主要练习如何使用输入输出流和 getline 来安全读取内容

  • WikiRacer: 通过爬取 Wikipedia 的页面信息,并且维护优先队列来寻找 WikiRacer 的解题路径

  • GapBuffer: 借助 GapBuffer 来实现文字编辑器,涵盖了构建函数、析构函数、运算符重载、移动语义、随机访问迭代器、模板、const correctness、智能指针等内容

在完成过程中,主要遇到了以下问题:

Problem 1

Q: 如何实现 const correctness 并且不需要重复写代码?

A: 使用 static_cast 和 const_cast 改变 const 属性。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
template <typename T>
typename GapBuffer<T>::const_reference GapBuffer<T>::at(size_type pos) const {
    if (pos >= _logical_size) {
        throw std::domain_error("position out of bounds");
    }
    return _elems[to_array_index(pos)];
}

template <typename T>
typename GapBuffer<T>::reference GapBuffer<T>::at(size_type pos) {
    return const_cast<reference> (static_cast<const GapBuffer<T>*> (this) -> at(pos));
}