Алгоритмы 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(), если элемент не найден?
Anull
B-1
CИтератор end()
Dfalse
3. Из какого заголовка подключить std::accumulate?
A<algorithm>
B<numeric>
C<math>
D<iterator>
Поддержать проект