std::min
cppreference.com
<tbody> </tbody>
template< class T > const T& min( const T& a, const T& b ); |
(1) | (constexpr C++14) |
template< class T, class Compare > const T& min( const T& a, const T& b, Compare comp ); |
(2) | (constexpr C++14) |
template< class T > T min( std::initializer_list<T> ilist ); |
(3) | ( C++11) (constexpr C++14) |
template< class T, class Compare > T min( std::initializer_list<T> ilist, Compare comp ); |
(4) | ( C++11) (constexpr C++14) |
1,2) .
3,4)
ilist.1,3)
operator< ,2,4)
comp.a, b
|
||
ilist
|
||
| cmp | (.. , Compare), true, a b.:
| |
-T LessThanComparable. (1,3)
| ||
-T CopyConstructible. (3,4)
| ||
1,2)
a b. , a.3,4)
ilist. , () .. #
1)
[[assume(!((a<result)||(b<result)))]]2)
[[assume(!(cmp(result,a)||cmp(result,b)))]]3,4)
, cmp
1,2) O(1) - .
3,4) O(
ilist.size()) - ilist.size().
template<class T>
const T& min(const T& a, const T& b)
{
return (a < b) ? a : b;
}
|
template<class T, class Compare>
const T& min(const T& a, const T& b, Compare comp)
{
return (comp(a, b)) ? a : b;
}
|
template<class T>
T min( std::initializer_list<T> ilist)
{
return *std::min_element(ilist.begin(), ilist.end());
}
|
template<class T, class Compare>
T min(std::initializer_list<T> ilist, Compare comp)
{
return *std::min_element(ilist.begin(), ilist.end(), comp);
}
|
#include <algorithm>
#include <iostream>
int main()
{
auto inv=[](auto const&a,decltype(a)const&b)noexcept->bool{return b<a;};
std::cout << "std::min(1, 9999) = "
<< std::min(1, 9999) << '\n';
std::cout << "std::min('a', 'b') = "
<< std::min('a', 'b') << '\n';
std::cout << "std::min({4.1, 3.5, 2.5}) = "
<< std::min({4.1, 3.5, 2.5}) << '\n';
std::cout << "std::min(1, 9999, inv) = "
<< std::min(1, 9999, inv) << '\n';
std::cout << "std::min('a', 'b', inv) = "
<< std::min('a', 'b', inv ) << '\n';
std::cout << "std::min({4.1, 3.5, 2.5}, inv) = "
<< std::min({4.1, 3.5, 2.5}, inv) << '\n';
}
:
std::min(1, 9999) = 1
std::min('a', 'b') = a
std::min({4.1, 3.5, 2.5}) = 2.5
std::min(1, 9999, inv) = 9999
std::min('a', 'b', inv) = b
std::min({4.1, 3.5, 2.5}, inv) = 4.1
Defect reports
C++:
| LWG 281 | C++98 | (1,2) , T CopyConstructible
|
|
| LWG 2239 | C++98 C++11 |
1. (2) (C++98) (4) (C++11) , T LessThanComparable2. |
1. 2. |
.
| ( ) | |
(C++11) |
( ) |
| ( ) | |
(C++17) |
( ) |
(C++20) |
() |