Daily bit(e) C++ #202, Алгоритмы min-max, работающие поверх итераторов: std::min_element, std::max_element и std::minmax_element.
std::min_element, std::max_element и (C++11) std::minmax_element — это алгоритмы min-max, которые работают с верхней части итераторов, возвращая итератор к минимальному/максимальному элементу.
Алгоритмы поддерживают параллельные (C++17) варианты, поддерживают constexpr и поддерживают диапазон (C++20).
C++20 также предлагает более простую альтернативу: диапазонную перегрузку базовых алгоритмов min-max.
#include <vector> #include <algorithm> std::vector<int> data{1,2,3,4,5}; auto min = std::min_element(data.begin(), data.end()); // min == data.begin(), *min == 1 auto max = std::max_element(data.begin(), data.end()); // max == std::prev(data.end()), *max == 5 auto [mi,ma] = std::minmax_element(data.begin(), data.end()); // mi == min, ma == max, *mi == 1, *ma == 5 // If we only need the values, C++ 20 offers a simpler alternative: auto [x,y] = std::ranges::minmax(data); // Returns by-value // x == 1, y == 5 // Example with projections: struct Element { int v; }; std::vector<Element> elements{{2},{1},{4},{5},{3}}; // Select the minimum element based on the value of Element::v auto it = std::ranges::min_element(elements, {}, &Element::v); // *it == Element{1}
Откройте пример в Compiler Explorer.