Привет, Хабр!

Недавно Егор Суворов, преподаватель курса по С++ в Питерской Вышке, прочитал лекцию о некоторых особенностях языка для участников Всероссийской олимпиады школьников по информатике. Егор рассказал о шаблонах в C++, а также где и зачем они возникают: обобщённое программирование структур данных и алгоритмов, функторы и лямбда-функции, как можно повысить уровень абстракций и упростить код.

Важное уточнение: эта лекция — не попытка объять необъятное, а краткий экскурс по полезным возможностям C++ для членов олимпиадного сообщества: от извлечения кода в класс до внутренних механизмов работы лямбда-функций и щепотки ограничений (constraints) из C++20. Если интересно, приглашаем к просмотру.

Подробные таймкоды

00:53 — Что нужно знать перед просмотром лекции

02:00 — Особенности С++

03:10 — Хорошие источники знаний и практик в C++

04:45Классы. Стек с минимумом

06:21 — Создание своей структуры

09:03 — Запрещаем прямой доступ

09:53 — Упрощаем отладку

10:29Шаблоны классов

11:24 — Статический полиморфизм в разных языках

12:03 — Оптимизация

12:27 — Ошибки компиляции и инстанцирование

13:40 — Ограничения (С++20)

15:01Шаблоны функций

15:27 — Автовывод параметров

16:21 — Class Template Argument Deduction (CTAD, С++17)

16:56 — Ошибки компиляции и инстанцирование

17:47 — Обобщенное программирование

19:12 — Вложенные типы

20:10 — Продвинутые техники

20:33 Функторы

21:00 — Функциональные объекты

21:56 — Как параметр шаблона

22:30 — Функторы с состоянием

23:26 — Функторы с состоянием для контейнеров

24:42Лямбда-выражения

25:38 — Расшифровка лямбды

26:28 — Сохранение в переменную

27:27 — Рекурсия не поддерживается

27:56 — Захваты по значению и ссылке

29:18 — Захват с инициализатором

30:29 — Комбинированные захваты

31:16 Применение функторов

32:15 — IIFE

33:18 — Вектор лямбд и стирание типов (type erasure)

34:36 — Функтор как параметр функции

35:51 — Функтор как поле класса

37:45 — Более сложные структуры данных (декартово дерево, дерево отрезков)

38:34 За кадром: лямбды-компараторы

39:48За кадром: более сложные шаблоны

41:23 — Студенческие проекты на C++ (в прошлом году рассказывали о проектах наших первокурсниках)

Если у вас остались вопросы, смело задавайте их в комментариях или лично Егору.