std:: max
|
Definiert im Header
<algorithm>
|
||
|
template
<
class
T
>
const T & max ( const T & a, const T & b ) ; |
(1) | (constexpr seit C++14) |
|
template
<
class
T,
class
Compare
>
const T & max ( const T & a, const T & b, Compare comp ) ; |
(2) | (constexpr seit C++14) |
|
template
<
class
T
>
T max ( std:: initializer_list < T > ilist ) ; |
(3) |
(seit C++11)
(constexpr seit C++14) |
|
template
<
class
T,
class
Compare
>
T max ( std:: initializer_list < T > ilist, Compare comp ) ; |
(4) |
(seit C++11)
(constexpr seit C++14) |
Gibt den größeren der angegebenen Werte zurück.
Inhaltsverzeichnis |
Parameter
| a, b | - | die zu vergleichenden Werte |
| ilist | - | Initialisierungsliste mit den zu vergleichenden Werten |
| comp | - |
Vergleichsfunktionsobjekt (d.h. ein Objekt, das die Anforderungen von
Compare
erfüllt), das
true
zurückgibt, wenn
a
kleiner
als
b
ist.
Die Signatur der Vergleichsfunktion sollte äquivalent zu Folgender sein: bool cmp ( const Type1 & a, const Type2 & b ) ;
Obwohl die Signatur nicht
const
&
benötigt, darf die Funktion die übergebenen Objekte nicht modifizieren und muss alle Werte des Typs (möglicherweise const)
|
Rückgabewert
Komplexität
Mögliche Implementierung
| max (1) |
|---|
template<class T> const T& max(const T& a, const T& b) { return (a < b) ? b : a; } |
| max (2) |
template<class T, class Compare> const T& max(const T& a, const T& b, Compare comp) { return (comp(a, b)) ? b : a; } |
| max (3) |
template<class T> T max(std::initializer_list<T> ilist) { return *std::max_element(ilist.begin(), ilist.end()); } |
| max (4) |
template<class T, class Compare> T max(std::initializer_list<T> ilist, Compare comp) { return *std::max_element(ilist.begin(), ilist.end(), comp); } |
Hinweise
Das Erfassen des Ergebnisses von
std::max
per Referenz erzeugt eine hängende Referenz, wenn einer der Parameter ein temporäres Objekt ist und dieser Parameter zurückgegeben wird:
int n = -1; const int& r = std::max(n + 2, n * 2); // r ist hängend
Beispiel
#include <algorithm> #include <iomanip> #include <iostream> #include <string_view> int main() { auto longest = [](const std::string_view s1, const std::string_view s2) { return s1.size() < s2.size(); }; std::cout << "Larger of 69 and 96 is " << std::max(69, 96) << "\n" "Larger of 'q' and 'p' is '" << std::max('q', 'p') << "'\n" "Largest of 010, 10, 0X10, and 0B10 is " << std::max({010, 10, 0X10, 0B10}) << '\n' << R"(Longest of "long", "short", and "int" is )" << std::quoted(std::max({"long", "short", "int"}, longest)) << '\n'; }
Ausgabe:
Larger of 69 and 96 is 96 Larger of 'q' and 'p' is 'q' Largest of 010, 10, 0X10, and 0B10 is 16 Longest of "long", "short", and "int" is "short"
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 281 | C++98 |
T
musste
CopyConstructible
sein für Überladungen
(
1,2
)
|
nicht erforderlich |
| LWG 2239 |
C++98
C++11 |
1.
T
musste
LessThanComparable
sein für
Überladungen ( 2 ) (C++98) und ( 4 ) (C++11) 2. die Komplexitätsanforderungen fehlten |
1. nicht erforderlich
2. Anforderungen hinzugefügt |
Siehe auch
|
gibt den kleineren der gegebenen Werte zurück
(Funktions-Template) |
|
|
(C++11)
|
gibt den kleineren und größeren von zwei Elementen zurück
(Funktions-Template) |
|
gibt das größte Element in einem Bereich zurück
(Funktions-Template) |
|
|
(C++17)
|
begrenzt einen Wert zwischen einem Paar von Grenzwerten
(Funktions-Template) |
|
(C++20)
|
gibt den größeren der gegebenen Werte zurück
(Algorithmus-Funktionsobjekt) |