Алгоритмы STL в C++

Алгоритмы STL в C++: sort, find, count, reverse, min_element — стандартные алгоритмы из заголовка <algorithm>.

Заголовок <algorithm> содержит десятки готовых алгоритмов, которые работают с любыми контейнерами STL через итераторы. Не нужно писать сортировку вручную — она уже есть.

Итераторы: begin и end

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

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v = {5, 2, 8, 1, 9, 3};

    std::sort(v.begin(), v.end());    // сортировка по возрастанию

    for (int x : v) std::cout << x << " ";
    std::cout << "\n";
    return 0;
}

Вывод:

1 2 3 5 8 9 

Сортировка с компаратором

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v = {5, 2, 8, 1, 9, 3};

    // Сортировка по убыванию — передаём компаратор
    std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });

    for (int x : v) std::cout << x << " ";
    std::cout << "\n";
    return 0;
}

Вывод:

9 8 5 3 2 1 

Полезные алгоритмы

Функция

Действие

sort(b, e)

сортировка по возрастанию

reverse(b, e)

разворот

find(b, e, x)

итератор на первый найденный x

count(b, e, x)

количество вхождений x

min_element(b, e)

итератор на минимальный элемент

max_element(b, e)

итератор на максимальный элемент

accumulate(b, e, init)

сумма элементов (из <numeric>)

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>

int main() {
    std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6};

    // Поиск
    auto it = std::find(v.begin(), v.end(), 5);
    if (it != v.end())
        std::cout << "5 найдено, индекс: " << (it - v.begin()) << "\n";

    // Подсчёт
    std::cout << "Единиц: " << std::count(v.begin(), v.end(), 1) << "\n";

    // Минимум
    std::cout << "Мин: " << *std::min_element(v.begin(), v.end()) << "\n";

    // Сумма
    int sum = std::accumulate(v.begin(), v.end(), 0);
    std::cout << "Сумма: " << sum << "\n";
    return 0;
}

Вывод:

5 найдено, индекс: 4
Единиц: 2
Мин: 1
Сумма: 31

Коротко

  • Алгоритмы STL из <algorithm> работают с любым контейнером через итераторы.
  • sort(v.begin(), v.end()) — сортировка; третий аргумент — компаратор.
  • find возвращает итератор; если не нашло — v.end().
  • accumulate — в заголовке <numeric>, остальные — в <algorithm>.
Проверьте себя
1. Что принимают алгоритмы STL вместо конкретного контейнера?
AПару итераторов
BКонкретный тип коллекции
CРазмер массива
DУказатель на начало
2. Что вернёт find(), если элемент не найден?
AИтератор end()
Bnull
C-1
Dfalse
3. Из какого заголовка подключить std::accumulate?
A<numeric>
B<algorithm>
C<math>
D<iterator>