Schedule
Click a week to see what to do, what to read, and the slides. Each week’s learning objectives are there too, folded away until you want them.
Learning objectives 9
🧠 Understanding
- Describe the process of compilation of a C++ program.
- Articulate the importance of initializing variables.
- Identify and compare the sizes of different data types.
- Explain what pointers are and how dereferencing works.
🛠️ Skills
- Perform basic I/O using
coutandcin. - Create and initialize variables of various data types.
- Write and convert values in decimal, hexadecimal, and binary.
- Declare and initialize array variables.
- Create pointers and use the dereferencing and address-of operators.
Learning objectives 7
🧠 Understanding
- Articulate the differences between in, out, and in/out parameters.
- Compare pass-by-value, pass-by-reference, and pass-by-const-ref and choose correctly.
🛠️ Skills
- Write
if,if-else,if-else-if, andswitchstatements correctly. - Create
whileandforloops usingbreakandcontinue. - Define and call functions with overloading and default arguments.
- Pass arrays as parameters to functions.
- Use Makefiles to build multi-file C++ projects.
Learning objectives 5
🧠 Understanding
- Explain end-of-file conditions and how to detect them.
- Explain the purpose and flow of exception handling (
try/catch/throw).
🛠️ Skills
- Open, read from, write to, and close files.
- Use
try,catch, andthrowcorrectly in C++ programs. - Define, iterate over, and manipulate two-dimensional arrays.
Learning objectives 7
🧠 Understanding
- Reason about
publicandprivateaccess modifiers. - Explain when C++ calls constructors and destructors and why that matters.
🛠️ Skills
- Define a class and implement it across
.hand.cppfiles. - Implement constructors, destructors, and general methods.
- Instantiate objects statically.
- Implement operator overloading for a class.
- Apply test-driven development to design and verify a class.
Learning objectives 7
🧠 Understanding
- Reason about the difference between shallow and deep copies of a data structure.
- Explain when C++ calls the destructor on an object.
- Explain when it is important to implement the destructor explicitly.
- Understand how a dynamic array adapts its internal size.
🛠️ Skills
- Recognize and implement a copy constructor.
- Use
new,delete, anddelete[]to manage dynamic memory. - Implement a dynamic array class with resizing behavior.
Learning objectives 6
🧠 Understanding
- Describe when appending to a dynamic array is inexpensive vs. expensive.
- Reason about the difference between a dynamic array's size and capacity.
- Explain what a class template is and why to use it instead of a class.
- Reason about time complexity: linear, constant, and amortized constant time.
🛠️ Skills
- Implement a class template.
- Determine the time complexity of append, insert, remove, and copy-constructor on a dynamic array.
Learning objectives 6
🧠 Understanding
- Describe the organization of a linked list and how Nodes chain together.
- Reason about the time complexity of prepend, append, remove, traverse, search, and indexing.
- Explain how the Node destructor causes a chain reaction to delete all Nodes.
- Compare and contrast a linked list vs. a dynamic array and choose the right one for a given scenario.
🛠️ Skills
- Write code to traverse a linked list.
- Implement prepend, append, and remove operations on a linked list.
Learning objectives 6
🧠 Understanding
- Describe the concept of Big-Oh notation for analyzing algorithmic complexity.
- Reason about Big-Oh as an approximation: a·f(n) + b.
- Identify typical Big-Oh curves (O(1), O(log n), O(n), O(n log n), O(n²)).
- Analyze best, worst and amortized complexity.
🛠️ Skills
- Classify the time complexity of a given algorithm using Big-Oh notation.
- Compare the efficiency of two algorithms and justify the better choice.
Friday Oct 23 is a POGIL, classifying the complexity of code snippets, in groups.
Learning objectives 7
🧠 Understanding
- Enumerate the typical API for a Stack and a Queue.
- Define an Abstract Data Type (ADT).
- Describe how a circular array works, and how hashing computes an index.
- Reason about collisions, load factor, and the time-space trade-off in a hash table.
🛠️ Skills
- Implement a Stack with O(1) push and pop.
- Implement a Queue with O(1) enqueue and dequeue.
- Implement and use a hash table with a reasonable hash function.
Learning objectives 7
🧠 Understanding
- Explain how a recursive function calls itself, and how it terminates.
- Describe the run-time stack, and the winding and unwinding phases.
- Reason about the complexity of Towers of Hanoi.
- Identify the time complexity of common sorting algorithms.
🛠️ Skills
- Design and implement a recursive solution to a problem.
- Implement insertion sort and selection sort, and compare them.
- Explain why merge sort is tractable only because it is recursive.
Learning objectives 5
🧠 Understanding
- Articulate the operations one can perform on a Binary Search Tree.
- Understand insert, contains, remove, getHeight, the destructor and traversals.
- Describe the characteristics and complexity of the STL
setandmap.
🛠️ Skills
- Implement a BST with insert, contains and traversals.
- Write code using iterators to traverse a
setor amap.
The STL set and map are trees underneath, you meet the library's version the same week you build one by hand.
Learning objectives 5
🧠 Understanding
- Identify an AVL tree as a self-balancing BST.
- Articulate the importance of the balance factor in determining when to rebalance.
- Name the four rotation cases: LL, RR, LR, RL.
🛠️ Skills
- Compute the balance factor for a node.
- Implement AVL rotations to restore balance after insert or remove.
Learning objectives 4
🧠 Understanding
- Describe Moore’s law, and why manufacturers stopped raising clock speed.
- Describe the fork-join paradigm.
- Reason about how memory access patterns affect parallel speed-up.
🛠️ Skills
- Use
#pragma omp parallel forto parallelise a loop.
Window 3 reference date is Dec 2, in this week.
Learning objectives 2
🧠 Understanding
- Explain the speed-up you measured, and when parallelism does not help.
🛠️ Skills
- Compare timings across scheduling strategies and justify the difference.
Dec 9 is the last day of classes, all work and all check-in bookings close.