std:: max_element
|
Definiert in Header
<algorithm>
|
||
|
template
<
class
ForwardIt
>
ForwardIt max_element ( ForwardIt first, ForwardIt last ) ; |
(1) | (constexpr seit C++17) |
|
template
<
class
ExecutionPolicy,
class
ForwardIt
>
ForwardIt max_element
(
ExecutionPolicy
&&
policy,
|
(2) | (seit C++17) |
|
template
<
class
ForwardIt,
class
Compare
>
ForwardIt max_element
(
ForwardIt first, ForwardIt last,
|
(3) | (constexpr seit C++17) |
|
template
<
class
ExecutionPolicy,
class
ForwardIt,
class
Compare
>
ForwardIt max_element
(
ExecutionPolicy
&&
policy,
|
(4) | (seit C++17) |
Findet das größte Element im Bereich
[
first
,
last
)
.
|
std:: is_execution_policy_v < std:: decay_t < ExecutionPolicy >> ist true . |
(bis C++20) |
|
std:: is_execution_policy_v < std:: remove_cvref_t < ExecutionPolicy >> ist true . |
(seit C++20) |
Inhaltsverzeichnis |
Parameter
| first, last | - | das Paar von Iteratoren, das den Bereich der zu untersuchenden Elemente definiert |
| policy | - | die zu verwendende Ausführungsrichtlinie |
| comp | - |
Vergleichsfunktionsobjekt (d.h. ein Objekt, das die Anforderungen von
Compare
erfüllt), das
true
zurückgibt, wenn das erste Argument
kleiner
als das zweite ist.
Die Signatur der Vergleichsfunktion sollte äquivalent zu folgender sein: bool cmp ( const Type1 & a, const Type2 & b ) ;
Obwohl die Signatur keine
const
&
benötigt, darf die Funktion die übergebenen Objekte nicht modifizieren und muss alle Werte der Typen (möglicherweise const)
|
| Typanforderungen | ||
-
ForwardIt
muss die Anforderungen von
LegacyForwardIterator
erfüllen.
|
||
Rückgabewert
Iterator zum größten Element im Bereich
[
first
,
last
)
. Wenn mehrere Elemente im Bereich dem größten Element entsprechen, wird der Iterator zum ersten solchen Element zurückgegeben. Gibt
last
zurück, wenn der Bereich leer ist.
Komplexität
Gegeben N als std:: distance ( first, last ) :
Ausnahmen
Die Überladungen mit einem Template-Parameter namens
ExecutionPolicy
melden Fehler wie folgt:
-
Wenn die Ausführung einer als Teil des Algorithmus aufgerufenen Funktion eine Exception wirft und
ExecutionPolicyeiner der Standard-Policies ist, wird std::terminate aufgerufen. Für jede andereExecutionPolicyist das Verhalten implementierungsdefiniert. - Wenn der Algorithmus keinen Speicher allozieren kann, wird std::bad_alloc geworfen.
Mögliche Implementierung
| max_element (1) |
|---|
template<class ForwardIt> ForwardIt max_element(ForwardIt first, ForwardIt last) { if (first == last) return last; ForwardIt largest = first; while (++first != last) if (*largest < *first) largest = first; return largest; } |
| max_element (3) |
template<class ForwardIt, class Compare> ForwardIt max_element(ForwardIt first, ForwardIt last, Compare comp) { if (first == last) return last; ForwardIt largest = first; while(++first != last) if (comp(*largest, *first)) largest = first; return largest; } |
Beispiel
#include <algorithm> #include <cmath> #include <iostream> #include <vector> int main() { std::vector<int> v{3, 1, -14, 1, 5, 9, -14, 9}; std::vector<int>::iterator result; result = std::max_element(v.begin(), v.end()); std::cout << "Max element found at index " << std::distance(v.begin(), result) << " has value " << *result << '\n'; result = std::max_element(v.begin(), v.end(), [](int a, int b) { return std::abs(a) < std::abs(b); }); std::cout << "Absolute max element found at index " << std::distance(v.begin(), result) << " has value " << *result << '\n'; }
Ausgabe:
Max element found at index 5 has value 9 Absolute max element found at index 2 has value -14
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 212 | C++98 |
der Rückgabewert war nicht spezifiziert, falls
[
first
,
last
)
leer ist
|
gibt in diesem Fall last zurück |
| LWG 2150 | C++98 | der Iterator zum ersten Nicht-Kleinsten-Element wurde zurückgegeben | korrigierte den Rückgabewert |
Siehe auch
|
gibt das kleinste Element in einem Bereich zurück
(Funktions-Template) |
|
|
(C++11)
|
gibt das kleinste und das größte Element in einem Bereich zurück
(Funktions-Template) |
|
gibt den größeren der gegebenen Werte zurück
(Funktions-Template) |
|
|
(C++20)
|
gibt das größte Element in einem Bereich zurück
(Algorithmus-Funktionsobjekt) |