Course Overview


Welcome to CS 368: Learning Modern C++! This course introduces you to modern C++ programming. The course covers input/output, strings, using containers, iterators, and algorithms from the C++ standard library or Standard Template Library, object oriented programming, memory management, etc. In addition to the above topics, this course also focuses on teaching new concepts introduced in C++11 like lambas, RAII, smart pointers, move semantics, etc.

NOTE: The syllabus and the format of the course has been changed from how it was taught during the previous semesters. The reason for doing so is to help students understand the powerful higher level abstractions provided by modern C++ (i.e. C++11) before understanding the lower level details of how they are implemented.

Learning Objectives

Students successfully completing this course will be able to:
  • Write C++ programs making use of the abstractions provided by the language
  • Read and understand C++ code
  • Make use of C++11/14 features for writing efficient C++ code
  • Understand the lower level details of memory management like pointers and references
  • Solve some real world programming problems using C++ as a tool


Assignments are worth 70% of your grade. There will be 7 programming assignments in total. You'll be writing C++ code for solving these assignments. Assignments are individual work unless otherwise specified.

See assignments for assignment handouts and due dates.


As part of the course, you will complete one open-ended final project. Project is worth 30% of your grade.

For your project, you have to identify some real-world problem that can be solved using programming, and solve it using C++. You SHOULD work with a team-mate for the project. Individual projects are NOT allowed. More information about the project will be discussed in class.

See the project page for more details.


There is NO REQUIRED TEXTBOOK for the course.
Some recommended textbooks/online resources can be found here.

Mailing Lists

Important announcements will be sent to the class mailing list ( as well as posted to the web page, so please read your mail frequently! You are responsible for the material sent to that list. Note that the class list is automatically generated based on who is enrolled in the class.


Enroll in Piazza for posting questions about class contents and getting it answered by Instructor, TAs and fellow students. Check piazza frequently to stay up to date with the course.

Academic Misconduct

The purpose of this 1 credit course is for you to learn C++. If you turn in other people's work then you wouldn't be able to learn C++ and it may hurt you if you work in C++ sometime in the future. Please don't cheat.