NPRG051 - Advanced Programming in C++

Course format

In English, there is only one event in the weekly timetable, categorized as "tutorials" for technical reasons.

For enrollment, select the Czech lecture + the English tutorials; however, you are not supposed to visit the Friday lectures.

Each week, the English event will be used as a lecture, a consultation, or dedicated to the homework assignments, according to the schedule below.

The yellow parts are well supported by external resources and left to self-study, followed by consultations.

Grading & Exam

All the homework assignments must be written solely by the student who submits them, independently and without the use of AI tools.

You may discuss the design and associated problems with your peers; however, the code must be written only by you and you shall not share the code with anyone.

Timetable, slides, and online materials

David Bednárek    
The timetable is preliminary and may be adjusted during the semester.
Thu
15:40
Lectures / Tutorials / Topics / ConsultationsSlidesExternal / additional resources
Feb 20 Introduction Learning C++
Concepts requirements, concepts
Feb 27 Templates lvalue/rvalue, perfect forwarding variadic templates
universal references, forwarding
Mar 6 Templates working with references and values
Templates standard library traits and tags
Mar 13 Assignment #1
Self-study Metaprogramming in C++ iteration through variadic lists
metaprogramming
Type deduction auto, structure bindings, deduction rules structured bindings   type deduction   C++20
Type deduction deduction rules, CTAD, uniform initialization CTAD   initialization  
Type system type compatibility, type erasure, any, variant, visit, overload type erasure   overload   variant
Libraries ranges, span, ud literals, ..., C++23 & beyond ranges   chrono  
Parallel programming C++11 concurrency
parallel algorithms, tasks, concurrency, parallel algorithms again
C++11 parallelism, C++11 concurrency again
Parallel programming some scary reading: BAD, UGLY, and GOOD
Parallel programming
Networking, databases, AIO
Coroutines


Exploring C++20 Coroutines, Coroutines introduction, C++20 coroutines tutorial
Mar 20 Consultations (S203)
Mar 27 Consultations (S203)
Apr 3 Consultations (S203)
Apr 10 Feedback #1 + Assignment #2
Apr 17 Consultations (S203)
Apr 24 Consultations (S203)
May 1 Holiday
May 8 Holiday
May 15 Feedback #2 + Assignment #3
May 22 Consultations (S203)
Additional slides
Exceptions
Extended versions of winter-term lectures
(NPRG041)
declarations-definitions
templates
Deeper examples related to summer-term lectures tuple
Very advanced topics mixin
Metaprogramming in C++ sfinae
Modules modules