Алгоритмы и представления

Последнее обновление: 31.03.2023

Алгоритмы представляют специальные функции, которые определены в модуле <algorithm> и выполняются над контейнерами элементов. Разберем наиболее распространенные.

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

Функции std::min_element и std::max_element возвращают минимальный и макисмальный элементы соответственно из некоторого диапазона. В качестве коллекции элементов может выступать контейнер или массив. Диапазон элементов задается начальным и конечным итераторами контейнера/массива.

#include <iostream>
#include <vector>
#include <algorithm>
 
int main()
{
    std::vector<int> numbers { 1, 2, 3, 4, 5, 6, 7, 8};
    std::cout << "Min: " << *std::min_element(begin(numbers), end(numbers)) << std::endl;
    std::cout << "Max: " << *std::max_element(begin(numbers), end(numbers)) << std::endl;
}

Здесь находим минимальный и максимальный элементы вектора numbers. В обоих случаях в качестве диапазона выступает весь контейнер - от итератора begin(numbers) до итератора end(numbers). Результатом каждой функции также является итератор. Потому для получения значения (максимального/минимального значения) применяем операцию разыменования: *std::min_element(...). Консольный вывод:

Min: 1
Max: 8

Поскольку диапазон поиска значений представляет необязательно весь контейнер, а может быть только частью контейера, ограниченной итераторами, то мы можем найти максимальное/минимальное значения на каком-то определенном диапазоне, например, от 2-го до предпоследнего элемента:

std::cout << "Min: " << *std::min_element(begin(numbers), end(numbers)) << std::endl;
std::cout << "Max: " << *std::max_element(begin(numbers), end(numbers)) << std::endl;

Также для получения мин/макс. значений можно принименять функцию std::minmax_element(), которая также используется итераторы для задания диапазона поиска. Но результат возвращает в виде объекта std::pair<iterator, iterator>:

#include <iostream>
#include <vector>
#include <algorithm>
 
int main()
{
    std::vector<int> numbers { 1, 2, 3, 4, 5, 6, 7, 8};
    const auto [min, max] = std::minmax_element(begin(numbers), end(numbers));
    std::cout << "Min: " <<  *min << std::endl;
    std::cout << "Max: " << *max << std::endl;
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850