Перейти к содержимому
Модуль 5

STL и алгоритмы

Освойте стандартную библиотеку шаблонов — контейнеры, итераторы, алгоритмы, диапазоны и функциональное программирование.

Контейнеры

  1. Последовательные контейнеры: vector, deque, list, array

    Изучите последовательные контейнеры STL — vector, deque, list, forward_list и array. Узнайте об их компромиссах производительности, расположении в памяти и правилах инвалидации итераторов.

  2. Ассоциативные контейнеры: map, set, unordered_map

    Узнайте об упорядоченных и неупорядоченных ассоциативных контейнерах — map, set и их multi- и unordered-вариантах. Поймите, когда выбирать деревья, а когда хеш-таблицы.

  3. Адаптеры контейнеров и специальные контейнеры

    Узнайте о stack, queue, priority_queue и современных словарных типах, таких как span, string_view и optional. Поймите, когда адаптеры упрощают ваш код.

Итераторы и алгоритмы

  1. Итераторы: связующее звено STL

    Разберитесь в категориях итераторов — от итераторов ввода до непрерывных итераторов. Изучите арифметику итераторов, конвенцию begin/end и то, как итераторы связывают контейнеры с алгоритмами.

  2. Алгоритмы STL: мощь <algorithm>

    Освойте важнейшие алгоритмы STL — от поиска и сортировки до преобразования и накопления. Узнайте, как алгоритмы компонуются с итераторами для выразительного и эффективного кода.

  3. Лямбды и функциональное программирование

    Освойте лямбды C++ — списки захвата, mutable-лямбды, обобщённые лямбды и их использование в качестве предикатов алгоритмов. Изучите std::function, std::invoke и паттерн IIFE.

Диапазоны и представления (C++20)

  1. C++20 Ranges: новая парадигма

    Откройте для себя C++20 Ranges — современную переработку интерфейса алгоритмов STL. Изучите концепты диапазонов, алгоритмы на основе диапазонов, проекции и оператор pipe для компонуемых преобразований данных.

  2. Представления, ленивое вычисление и композиция

    Освойте представления C++20 — легковесные ленивые адаптеры диапазонов, компонуемые через оператор pipe. Изучите filter, transform, take, drop, split, join, iota и создание мощных конвейеров данных без промежуточных выделений памяти.