Ce face std::minmax_element
std::minmax_element returnează o pereche de iteratori {minim, maxim}. Face cel mult aproximativ 1,5·n comparații, mai puțin decât apelurile separate la min_element și max_element.
Diferență subtilă: dacă maximul apare de mai multe ori, se returnează ultima apariție (spre deosebire de max_element, care o returnează pe prima).
Parametri
| Parametru | Descriere |
|---|---|
first, last |
Intervalul. |
comp |
Opțional. Funcția de comparare. |
Ce returnează
std::pair de iteratori (minim, maxim).
Exemple
Exemplul 1: Amplitudinea temperaturilor
#include <algorithm>
#include <print>
#include <vector>
int main() {
std::vector<double> temp{4.5, 12.0, -2.5, 8.0, 15.5, 1.0};
auto [mic, mare] = std::minmax_element(temp.begin(), temp.end());
std::println("Minimă: {:.1f}, maximă: {:.1f}, diferență: {:.1f}", *mic, *mare, *mare - *mic);
}
Rezultat
Minimă: -2.5, maximă: 15.5, diferență: 18.0
Exemplul 2: Ultima apariție a maximului
Maximul 9 apare pe pozițiile 1 și 3; minmax_element o alege pe ultima, max_element pe prima.
#include <algorithm>
#include <print>
#include <vector>
int main() {
std::vector<int> v{4, 9, 2, 9, 2};
auto [mic, mare] = std::ranges::minmax_element(v);
std::println("minmax_element: minim la {}, maxim la {}", mic - v.begin(), mare - v.begin());
std::println("max_element: maxim la {}", std::ranges::max_element(v) - v.begin());
}
Rezultat
minmax_element: minim la 2, maxim la 3
max_element: maxim la 1
Greșeli frecvente
- Apelezi funcția pe un interval gol și dereferențiezi rezultatul: ambii iteratori sunt
last.
Comenzi înrudite
std::min_element: Găsește cel mai mic (min_element) sau cel mai mare (max_element) element dintr-un interval și returnează un iterator.std::minmax: Returnează dintr-un singur apel o pereche formată din cea mai mică și cea mai mare valoare.std::clamp: Limitează o valoare la un interval: o aduce la minim dacă e prea mică și la maxim dacă e prea mare.