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) |
Renvoie le plus grand des valeurs données.
a et b.operator< pour comparer les valeurs.T n'est pas LessThanComparable, le comportement est indéfini.comp pour comparer les valeurs.ilist.operator< pour comparer les valeurs.T n'est pas LessThanComparable, le comportement est indéfini.comp pour comparer les valeurs.Paramètres
| a, b | - | les valeurs à comparer |
| ilist | - | liste d'initialisation avec les valeurs à comparer |
| comp | - | objet fonction de comparaison (c.-à-d. un objet qui satisfait aux exigences de Compare) qui retourne true si a est inférieur à b.La signature de la fonction de comparaison doit être équivalente à la suivante :
Bien que la signature n'ait pas besoin d'avoir |
Valeur de retour
a et b. S'ils sont équivalents, retourne a.ilist. Si plusieurs valeurs sont équivalentes à la plus grande, retourne la plus à gauche.Complexité
operator<.comp.ilist.size() :operator<.comp.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 une temporaire et que ce paramètre est retourné :
int n = -1;
const int& r = std::max(n + 2, n * 2); // r is dangling
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 suivants, modifiant le comportement, ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 281 | C++98 | TT devait être CopyConstructible pour les surcharges (1,2)
|
non requis |
| LWG 2239 | C++98 C++11 |
1. T devait être LessThanComparable pourles surcharges (2) (C++98) et (4) (C++11) 2. les exigences de complexité étaient manquantes |
1. non requis 2. exigences ajoutées |
Voir aussi
| retourne la plus petite des valeurs données (modèle de fonction & objet fonction d'algorithme) | |
(C++20) |
|
(C++11) |
retourne le plus petit et le plus grand de deux éléments (modèle de fonction & objet fonction d'algorithme) |
(C++20) |
|
| retourne le plus grand élément d'une plage (modèle de fonction & objet fonction d'algorithme) | |
(C++20) |
|
(C++17) |
limite une valeur entre une paire de valeurs limites (modèle de fonction & objet fonction d'algorithme) |
(C++20) |
|
(C++20) |
retourne le plus grand des valeurs données (objet fonction d'algorithme) |