std::max
| Definido en el archivo de encabezado <algorithm>
|
||
template< class T > const T& max( const T& a, const T& b ); |
(1) | (constexpr desde C++14) |
template< class T, class Compare > const T& max( const T& a, const T& b, Compare comp ); |
(2) | (constexpr desde C++14) |
template< class T > T max( std::initializer_list<T> ilist ); |
(3) | (desde C++11) (constexpr desde C++14) |
template< class T, class Compare > T max( std::initializer_list<T> ilist, Compare comp ); |
(4) | (desde C++11) (constexpr desde C++14) |
Devuelve el mayor de los valores dados.
a y b.operator< para comparar los valores.T no es LessThanComparable, el comportamiento no está definido.comp para comparar los valores.ilist.operator< para comparar los valores.T no es LessThanComparable, el comportamiento no está definido.comp para comparar los valores.Parámetros
| a, b | - | Los valores a comparar. |
| ilist | - | La lista de inicializadores con los valores a comparar. |
| comp | - | objeto función de comparación (es decir, un objeto que satisface los requerimientos de Compare) que devuelve true si a es menor que b . La signatura de la función de comparación deberá ser equivalente a lo siguiente:
Mientras que la signatura no necesita ser |
Valor de retorno
a y b. Si son equivalentes, devuelve a.ilist. Si varios valores son equivalentes al mayor, devuelve el más a la izquierda.Complejidad
operator<.comp.ilist.size():operator<.comp.Posible implementación
| 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);
}
|
Notas
Capturar el resultado de std::max por referencia produce una referencia pendiente si uno de los parámetros es un temporal y ese parámetro se devuelve:
int n = 1;
const int& r = std::max(n-1, n+1);
// r es pendiente
Ejemplo
#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 << "El mayor de 69 y 96 es " << std::max(69, 96) << "\n"
"El mayor de 'q' y 'p' es '" << std::max('q', 'p') << "'\n"
"El mayor de 010, 10, 0X10, y 0B10 es "
<< std::max({010, 10, 0X10, 0B10}) << '\n'
<< R"(El más largo de "long", "short", e "int" es )"
<< std::quoted(std::max({"long", "short", "int"}, longest)) << '\n';
}
Salida:
El mayor de 69 y 96 es 96
El mayor de 'q' y 'p' es 'q'
El mayor de 010, 10, 0X10, y 0B10 es 16
El más largo de "long", "short", e "int" es "short"
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 281 | C++98 | Se requería que T fuera CopyConstructible para las sobrecargas (1,2).
|
No se requiere. |
| LWG 2239 | C++98 C++11 |
1. Se requería que T fuera LessThanComparable paralas sobrecargas (2) (C++98) y (4) (C++11) 2. Faltaba la complejidad de los requisitos. |
1. No se requiere. 2. Se añadieron los requisitos. |
Véase también
| Devuelve el menor de los elementos (plantilla de función) | |
(C++11) |
Devuelve el menor y el mayor de dos elementos. (plantilla de función) |
| Devuelve el elemento más grande en un rango. (plantilla de función) | |
(C++17) |
Restringe un valor entre un par de valores limitantes (plantilla de función) |
(C++20) |
Devuelve el mayor de los valores dados (niebloid) |