std:: max
|
Défini dans l'en-tête
<algorithm>
|
||
|
template
<
class
T
>
const T & max ( const T & a, const T & b ) ; |
(1) | (constexpr depuis C++14) |
|
template
<
class
T,
class
Compare
>
const T & max ( const T & a, const T & b, Compare comp ) ; |
(2) | (constexpr depuis C++14) |
|
template
<
class
T
>
T max ( std:: initializer_list < T > ilist ) ; |
(3) |
(depuis C++11)
(constexpr depuis C++14) |
|
template
<
class
T,
class
Compare
>
T max ( std:: initializer_list < T > ilist, Compare comp ) ; |
(4) |
(depuis C++11)
(constexpr depuis C++14) |
Retourne la plus grande des valeurs données.
Table des matières |
Paramètres
| a, b | - | les valeurs à comparer |
| ilist | - | liste d'initialisation avec les valeurs à comparer |
| comp | - |
objet fonction de comparaison (c'est-à-dire un objet qui satisfait aux exigences de
Compare
) qui renvoie
true
si
a
est
inférieur
à
b
.
La signature de la fonction de comparaison doit être équivalente à ce qui suit : bool cmp ( const Type1 & a, const Type2 & b ) ;
Bien que la signature n'ait pas besoin d'avoir
const
&
, la fonction ne doit pas modifier les objets qui lui sont passés et doit pouvoir accepter toutes les valeurs de type (éventuellement const)
|
Valeur de retour
Complexité
Implémentation possible
| 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); } |
Notes
Capturer le résultat de
std::max
par référence produit une référence pendante si l'un des paramètres est un temporaire et que ce paramètre est retourné :
int n = -1; const int& r = std::max(n + 2, n * 2); // r est pendante
Exemple
#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'; }
Sortie :
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"
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement correct |
|---|---|---|---|
| LWG 281 | C++98 |
T
devait être
CopyConstructible
pour les surcharges
(
1,2
)
|
non requis |
| LWG 2239 |
C++98
C++11 |
1.
T
devait être
LessThanComparable
pour
les surcharges ( 2 ) (C++98) et ( 4 ) (C++11) 2. les exigences de complexité étaient manquantes |
1. non requis
2. ajout des exigences |
Voir aussi
|
renvoie la plus petite des valeurs données
(modèle de fonction) |
|
|
(C++11)
|
renvoie le plus petit et le plus grand de deux éléments
(modèle de fonction) |
|
renvoie le plus grand élément dans une plage
(modèle de fonction) |
|
|
(C++17)
|
borne une valeur entre une paire de valeurs limites
(modèle de fonction) |
|
(C++20)
|
renvoie la plus grande des valeurs données
(objet fonction algorithme) |