std::min
Definido en el archivo de encabezado <algorithm>
|
||
template< class T > const T& min( const T& a, const T& b ); |
(1) | (constexpr desde C++14) |
template< class T, class Compare > const T& min( const T& a, const T& b, Compare comp ); |
(2) | (constexpr desde C++14) |
template< class T > T min( std::initializer_list<T> ilist ); |
(3) | (desde C++11) (constexpr desde C++14) |
template< class T, class Compare > T min( std::initializer_list<T> ilist, Compare comp ); |
(4) | (desde C++11) (constexpr desde C++14) |
Devuelve el menor 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
min (1) |
---|
template<class T> const T& min(const T& a, const T& b) { return (b < a) ? b : a; } |
min (2) |
template<class T, class Compare> const T& min(const T& a, const T& b, Compare comp) { return (comp(b, a)) ? b : a; } |
min (3) |
template<class T> T min(std::initializer_list<T> ilist) { return *std::min_element(ilist.begin(), ilist.end()); } |
min (4) |
template<class T, class Compare> T min(std::initializer_list<T> ilist, Compare comp) { return *std::min_element(ilist.begin(), ilist.end(), comp); } |
[editar] Notas
Capturar el resultado de std::min
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::min(n-1, n+1); // r es pendiente
[editar] Ejemplo
#include <algorithm> #include <iostream> #include <string_view> int main() { std::cout << "El menor de 10 y 010 es " << std::min(10, 010) << '\n' << "El menor de 'd' y 'b' es '" << std::min('d', 'b') << "'\n" << "El más corto de \"foo\", \"bar\", y \"hello\" es \"" << std::min({"foo", "bar", "hello"}, [](const std::string_view s1, const std::string_view s2) { return s1.size() < s2.size(); }) << "\"\n"; }
Salida:
El menor de 10 y 010 es 8 El menor de 'd' y 'b' es 'b' El más corto de "foo", "bar", y "hello" es "foo"
[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 mayor de dos 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 pequeño de 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 menor de los valores dados (niebloid) |