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.
T
no es LessThanComparable, el comportamiento no está definido.T
no es LessThanComparable, el comportamiento no está definido.Contenido |
[editar] 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: bool cmp(const Type1 &a, const Type2 &b); Mientras que la signatura no necesita ser const &, la función no debe modificar los objetos que se le pasaron y debe admitir todos los valores de los tipos (posiblemente |
[editar] Valor de retorno
[editar] Complejidad
[editar] 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); } |
[editar] 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
[editar] 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"
[editar] 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. |
[editar] 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) |