[ Web Proxy ]
URL:
Viewing: http://ru.cppreference.com/cpp/algorithm/min [Back]  [Original]

std::min cppreference.com
cppreference.com

std::min

cppreference.com
 
C++
(C++20)
(C++20)
(C++11)
(C++20)
/
(C++11)
(C++11)
(C++11)
(C++17)
 
(C++20)
, ranges::copy, ranges::sort, ...
(C++17)
(C++11)(C++11)(C++11)
(C++17)
(C++11)
( )
(C++11)
/
(C++11)
(C++17)

(C++17)
(C++17)
(C++17)
C
 

<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.
ilist.size() , T CopyConstructible, .
1,3) operator< ,
2,4) comp.

a, b
ilist
cmp (.. , Compare), true, a b.

:

bool cmp(const Type1 &a, const Type2 &b);

noexcept ( C++11) . const&, . ( const) Type1 Type2 ( , Type1& , Type1, Type1 ( C++11)). Type1 Type2 , T .

-
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 LessThanComparable
    
2.
1.
2.

.


( ) []
(C++11)

( ) []

( ) []
(C++17)

( ) []

() []

Web Proxy Viewer  |  New URL  |  Original Page