THE COMPLETE LEARNING MAP
C++: from your first program to modern C++
Designed for learners who have never programmed before. It moves from simple ideas to technical detail in a careful order. You will learn what to type and what the compiler, program, memory, and standard library are doing.
Language style: simple English, correct technical vocabulary, short definitions, diagrams, small examples, and step-by-step traces. Technical words are explained when first introduced.
Honest publication status: links marked Published are available now. Topics marked Planned are part of the target syllabus but are not yet published lessons.
How to study
- Follow modules in order if C++ is new to you.
- Type every example into your compiler. Predict output before running it.
- Read compiler errors carefully and explain the cause before changing code.
- Complete exercises without viewing answers first; test boundary cases.
- Use reference links for exact rules, not as a replacement for guided lessons.
Study-time estimates: these timings estimate active study, not passive reading alone. They include reading, code walkthroughs, and completing the lesson's practice. Actual time varies with prior experience and how thoroughly you test each example.
Module 1 — Programming foundations and toolchain
Understand programs before syntax, then set up the tools you need to build and run your first example.
- Published — What programming is: turning a problem into instructions
- Published — Why programming languages exist
- Published — From C++ source code to an executable
- Published — How a C++ program starts and executes
- Published — Install and use a C++ compiler
- Published — Your first C++ program, explained line by line
Module 2 — Variables, types, input, and output
Represent information and communicate with users.
- Published — Variables, values, and data types
- Published — Input and output with iostream
- Published — Initialization, assignment, and constants
- Published — Integer ranges, signedness, and floating-point precision
- Published — Type conversions, auto, and sizeof
Module 3 — Operators and expressions
- Published — Expressions, arithmetic, and deliberate conversions
- Published — Comparison, logical, and bitwise operators
- Published — Assignment, increment, and decrement
- Published — Bit manipulation and bit flags
- Published — Operator precedence and associativity
- Published — Explicit casts and safe numeric conversions
Module 4 — Decisions and loops
- Published — Making choices with if and switch
- Published — Repeating work with loops
- Published — Nested loops and iteration patterns
- Published — Loop control, input validation, and dry runs
- Published — Compiler warnings, debugging, and testing
Module 5 — Functions and program organisation
- Published — Functions, parameters, and return values
- Published — Declarations, definitions, and header files
- Published — Passing arguments: value, reference, and pointer
- Published — Scope, lifetime, and storage duration
- Published — Function overloading, declarations, and namespaces
- Published — Recursion and the function call stack
Namespace basics are introduced in Function design; advanced one-definition-rule (ODR) cases are not yet covered in this course.
Module 6 — Arrays, strings, and user-defined data
- Published — Arrays and indexed storage
- Published — Fixed-size sequences with std::array
- Published — Multidimensional arrays and nested loops
- Published — Text with std::string
- Published — C-style strings and character arrays
- Published — Structures, enumerations, and type aliases
- Published — Dynamic sequences with std::vector
- Published — Advanced dry runs and off-by-one errors
Module 7 — Pointers, references, and object lifetime
- Published — Pointers and memory addresses
- Published — References and const references
- Published — Pointer arithmetic, arrays, and safe interfaces
- Published — Object lifetime and dangling references
Module 8 — Classes, ownership, and object-oriented design
- Published — Classes and objects
- Published — Constructors, destructors, and invariants
- Published — Class design: access control, this, and static members
- Published — Const correctness and member functions
- Published — Class invariants, static members, and friends
- Published — Composition, encapsulation, and operator overloading
- Published — Inheritance, virtual functions, and polymorphism
- Published — Dynamic memory, RAII, and smart pointers
- Published — Abstract classes and virtual destructors
- Published — Pointer ownership and resource management
- Published — Copying, moving, and the Rule of Zero
Module 9 — Templates and the C++ standard library
Learn the generic-programming idea behind standard-library containers, then choose containers and algorithms based on the operations your program needs.
- Published — Function and class templates
- Published — Stacks, queues, deques, and lists
- Published — Maps, sets, and unordered containers
- Published — Iterator categories and invalidation
- Published — Choosing STL containers by operations and complexity
- Published — STL algorithms, iterators, and lambdas
- Published — Lambda captures and predicates
- Published — Custom comparators and sorting
- Published — optional, variant, pair, and tuple
Module 10 — Files, input validation, errors, and robust programs
- Published — File input and output
- Published — String streams, parsing, and input validation
- Published — Robust menu-driven programs and input validation
- Published — Command-line arguments and program configuration
- Published — Exceptions and error handling
- Published — Assertions, preconditions, and defensive checks
- Published — Exception safety and resource-safe design
- Published — Working with paths and files using std::filesystem
Module 11 — Modern C++ and advanced library features
- Published — Modern C++11, C++14, C++17, and C++20
- Published — Advanced templates, type traits, and if constexpr
- Published — constexpr and compile-time programming
- Published — C++20 concepts and ranges
- Published — C++23 library features: expected and print
- Published — string_view and span: non-owning views
- Published — Time and clocks with std::chrono
- Published — Random numbers with the C++ random library
- Published — C++ concurrency: threads, mutexes, and race conditions
- Published — Async tasks, futures, and atomic operations
- Published — Condition variables and producer-consumer synchronization
Module 12 — Problem solving and projects
- Published — Complexity, testing, and C++ projects
- Published — STL algorithm patterns: two pointers, sliding windows, and prefix sums
- Published — Binary search and STL search algorithms
- Published — Priority queues and heaps
- Published — STL complexity and problem-solving patterns
- Published — Project: build a calculator and unit converter
- Published — Project: Student record manager with files and vectors
- Published — Project: Inventory management with classes and STL
- Published — Build multi-file C++ projects with CMake
- Published — Unit testing C++ programs with CTest
- Published — Debugging C++ with GDB, AddressSanitizer, and UBSan
- Published — Capstone: build a tested library catalogue CLI
Technical reference library
- DevDocs C++ — searchable index for C++ language and standard-library documentation.
- cppreference: C++ language — language rules, types, expressions, statements, functions, classes, and templates.
- cppreference: C++ standard library — standard-library facilities and headers.
- A Tour of C++ resources — overview material from the C++ community.
- Microsoft Learn: C++ documentation — compiler, language, library, and build-tool documentation.
Publication rule: a topic is not marked Published until its lesson has been written, code checked, examples explained, practice added, references verified, and links tested. This roadmap is the target syllabus, not a claim that every planned lesson is ready.