Constrained algorithms and algorithms on ranges(C++20) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Constrained algorithms, e.g.ranges::copy,ranges::sort, ... | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Execution policies(C++17) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Numeric operations | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Operations on uninitialized memory | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Defined in header <algorithm> | ||
template<class T> const T& min(const T& a,const T& b); | (1) | (constexpr since C++14) |
template<class T,class Compare> const T& min(const T& a,const T& b, Compare comp); | (2) | (constexpr since C++14) |
template<class T> T min(std::initializer_list<T> ilist); | (3) | (since C++11) (constexpr since C++14) |
template<class T,class Compare> T min(std::initializer_list<T> ilist, Compare comp); | (4) | (since C++11) (constexpr since C++14) |
Returns the smaller of the given values.
T
is notLessThanComparable, the behavior is undefined.T
is notLessThanComparable, the behavior is undefined.Contents |
a, b | - | the values to compare |
ilist | - | initializer list with the values to compare |
cmp | - | comparison function object (i.e. an object that satisfies the requirements ofCompare) which returnstrue ifa isless thanb. The signature of the comparison function should be equivalent to the following: bool cmp(const Type1& a,const Type2& b); While the signature does not need to haveconst&, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const) |
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);} |
Capturing the result ofstd::min
by reference produces a dangling reference if one of the parameters is a temporary and that parameter is returned:
int n=-1;constint& r= std::min(n+2, n*2);// r is dangling
#include <algorithm>#include <iostream>#include <string_view> int main(){std::cout<<"smaller of 10 and 010 is "<< std::min(10,010)<<'\n'<<"smaller of 'd' and 'b' is '"<< std::min('d','b')<<"'\n"<<"shortest of\"foo\",\"bar\", and\"hello\" is\""<< std::min({"foo","bar","hello"},[](conststd::string_view s1,conststd::string_view s2){return s1.size()< s2.size();})<<"\"\n";}
Output:
smaller of 10 and 010 is 8smaller of 'd' and 'b' is 'b'shortest of "foo", "bar", and "hello" is "foo"
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 281 | C++98 | T was required to beCopyConstructible for overloads(1,2) | not required |
LWG 2239 | C++98 C++11 | 1.T was required to beLessThanComparable foroverloads(2) (C++98) and(4) (C++11) 2. the complexity requirements were missing | 1. not required 2. added the requirements |
returns the greater of the given values (function template)[edit] | |
(C++11) | returns the smaller and larger of two elements (function template)[edit] |
returns the smallest element in a range (function template)[edit] | |
(C++17) | clamps a value between a pair of boundary values (function template)[edit] |
(C++20) | returns the smaller of the given values (algorithm function object)[edit] |