STL и алгоритмы
Освойте стандартную библиотеку шаблонов — контейнеры, итераторы, алгоритмы, диапазоны и функциональное программирование.
Контейнеры
Последовательные контейнеры: vector, deque, list, array
Изучите последовательные контейнеры STL — vector, deque, list, forward_list и array. Узнайте об их компромиссах производительности, расположении в памяти и правилах инвалидации итераторов.
Ассоциативные контейнеры: map, set, unordered_map
Узнайте об упорядоченных и неупорядоченных ассоциативных контейнерах — map, set и их multi- и unordered-вариантах. Поймите, когда выбирать деревья, а когда хеш-таблицы.
Адаптеры контейнеров и специальные контейнеры
Узнайте о stack, queue, priority_queue и современных словарных типах, таких как span, string_view и optional. Поймите, когда адаптеры упрощают ваш код.
Итераторы и алгоритмы
Итераторы: связующее звено STL
Разберитесь в категориях итераторов — от итераторов ввода до непрерывных итераторов. Изучите арифметику итераторов, конвенцию begin/end и то, как итераторы связывают контейнеры с алгоритмами.
Алгоритмы STL: мощь <algorithm>
Освойте важнейшие алгоритмы STL — от поиска и сортировки до преобразования и накопления. Узнайте, как алгоритмы компонуются с итераторами для выразительного и эффективного кода.
Лямбды и функциональное программирование
Освойте лямбды C++ — списки захвата, mutable-лямбды, обобщённые лямбды и их использование в качестве предикатов алгоритмов. Изучите std::function, std::invoke и паттерн IIFE.
Диапазоны и представления (C++20)
C++20 Ranges: новая парадигма
Откройте для себя C++20 Ranges — современную переработку интерфейса алгоритмов STL. Изучите концепты диапазонов, алгоритмы на основе диапазонов, проекции и оператор pipe для компонуемых преобразований данных.
Представления, ленивое вычисление и композиция
Освойте представления C++20 — легковесные ленивые адаптеры диапазонов, компонуемые через оператор pipe. Изучите filter, transform, take, drop, split, join, iota и создание мощных конвейеров данных без промежуточных выделений памяти.