Giter Site home page Giter Site logo

cs106l-self-learning's Introduction

Self-Learning Materials of CS106L

This repository collects and organizes learning materials of CS106L, a C++ programming course taught at Stanford University. The course delves into many useful and essential features of modern C++ and will help you understand C++ more in depth. In specific, this repo contains lecture slides, textbook, starter codes and testbenches of programming assignments.

.
├── assignments # documents and starter codes of programming assigments
│   ├── GapBuffer
│   ├── HashMap
│   └── KDTree
├── README.md
├── slides # lecture slides of Sp23 and Win21 semesters
│   ├── Spring2023
│   └── Winter2021
├── solutions # solution codes of three programming assignments
│   ├── GapBuffer
│   ├── HashMap
│   └── KDTree
└── textbooks # textbook for this course
    └── full_course_reader.pdf

Course Overview

This course discusses the following topics of C++ programming:

  • Type and Struct
  • Uniform Initialization
  • Reference
  • Streams
  • Containers
  • Iterators
  • Function Templates
  • Lambda Function
  • Template Class
  • Const-Correctness
  • Operator Overloading
  • Special Member Function
  • Move Semantics
  • Resource Acquisition Is Initialization

For each topic, this repo includes two versions of lecture slides: one from Spring 2023 semester and the other comes from Winter 2022 semester. These two versions cover similar aspects of each topic but may illustrate them in different ways. And you can refer to both of them when learning a specific topic.

Programing Assignments

Programming assignments are the most important and valuable part of this course, which guide you to create STL-compliant container classes from scratch. The implementation of these classes refers to most C++ grammars and features introduced in the lecture. By completing these assignments, you will better understand and master what taught in this class and improve your C++ programming skills.

This repo has collected programming assignments released from three different semesters of this course, including HashMap, KDTree and GapBuffer. Each assignment is accompanied by comprehensive materials, including documents, starter codes, benchmarks, build scripts, and solutions.

  • GapBuffer: sequential container optimized for fast inserttion and deletion at any position;
  • KDTree: k-dimension binary search tree for efficient storage and query of multi-dimension data;
  • HashMap: associative container similiar to the unordered_map provided in STL;

The original versions of these programming assignments were built based on QtCreator, which requires tedious and cumbersome process to setup development environment for self-learners. This repo has refactored the build and test process of each assignment using CMake and GoogleTest for the convenience of development on Linux machines. And you only need to ensure that your Linux machine has installed CMake and C++ compiler before getting started with these assignments. To setup development environemnt on Ubuntu systems, you may refer to following commands:

sudo apt-get update
sudo apt-get install build-essential libssl-dev cmake -y

Related Resources

All contents in this repo are sourced from online resources inclduing:

cs106l-self-learning's People

Contributors

wengwz avatar

Stargazers

Magnus avatar  avatar molepi avatar  avatar 北甍 avatar maxin avatar  avatar  avatar whitevenus avatar Homey avatar JHC avatar Lutte avatar Dianhao He avatar  avatar ChenPeng(彭晨) avatar  avatar CedricYin avatar

Watchers

 avatar

Forkers

sandian0 mxhellor

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.