Статьи

Учебные материалы по языку C++ — от основ до продвинутых тем

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

Страница 34 из 43 · 2026-10-25 · 1 мин чтения

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

Зачем нужны алгоритмы

Стандартная библиотека предоставляет готовые алгоритмы для поиска, сортировки, подсчёта и преобразования диапазонов. Это уменьшает количество ручных циклов и делает намерение кода яснее.

#include <algorithm>#include <vector>std::vector<int> values{5, 1, 4, 2};std::sort(values.begin(), values.end());auto it = std::find(values.begin(), values.end(), 4);

begin() обозначает начало диапазона, а end() — позицию сразу после последнего элемента. end() нельзя разыменовывать.

Итераторы

Итератор — объект, который обозначает элемент или позицию в последовательности. Разные контейнеры поддерживают разные операции с итераторами. Например, у vector есть произвольный доступ, а у list нет доступа по индексу за константное время.

Предикаты

Многие алгоритмы принимают функцию или лямбда-выражение:

auto count = std::count_if(values.begin(), values.end(),    [](int value) { return value > 2; });

Лямбда здесь возвращает true, если элемент больше двух.

Удаление элементов

До C++20 часто использовался идиоматический erase-remove:

values.erase(    std::remove(values.begin(), values.end(), 2),    values.end());

remove перемещает сохраняемые элементы в начало диапазона и возвращает новую логическую границу, но сам контейнер не уменьшает. erase действительно удаляет хвост. В C++20 для стандартных контейнеров доступен std::erase(values, 2).

Алгоритмы и контейнеры

Не изменяй контейнер внутри алгоритма так, чтобы инвалидировать используемые итераторы, если алгоритм этого не предусматривает. Проверяй требования алгоритма к типу итератора и операции сравнения.

Итог

Сначала ищи подходящий алгоритм STL, а не пиши цикл вручную. Алгоритмы выражают намерение, проверены и часто лучше оптимизируются компилятором.