Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Привет, Хабр!
Недавно Егор Суворов, преподаватель курса по С++ в Питерской Вышке, прочитал лекцию о некоторых особенностях языка для участников Всероссийской олимпиады школьников по информатике. Егор рассказал о шаблонах в 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++ (в прошлом году рассказывали о проектах наших первокурсниках)
Если у вас остались вопросы, смело задавайте их в комментариях или лично Егору.