std::max() algorithm
- od C++14
- od C++11
- do C++11
// (1)
template< class T >
constexpr const T& max( const T& a, const T& b );
// (2)
template< class T, class Compare >
constexpr const T& max( const T& a, const T& b, Compare comp );
// (3)
template< class T >
constexpr T max( std::initializer_list<T> ilist );
// (4)
template< class T, class Compare >
constexpr T max( std::initializer_list<T> ilist, Compare comp );
// (1)
template< class T >
const T& max( const T& a, const T& b );
// (2)
template< class T, class Compare >
const T& max( const T& a, const T& b, Compare comp );
// (3)
template< class T >
T max( std::initializer_list<T> ilist );
// (4)
template< class T, class Compare >
T max( std::initializer_list<T> ilist, Compare comp );
// (1)
template< class T >
const T& max( const T& a, const T& b );
// (2)
template< class T, class Compare >
const T& max( const T& a, const T& b, Compare comp );
Returns the greater of the given values.
- (1 - 2) Returns the greater of
a
andb
. - (3 - 4) Returns the greatest of the values in initializer list
ilist
.
Parameters
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 of Compare) which returns
While the signature does not need to have The types |
Type requirements
-
(1, 3):
T
LessThanComparable -
(3 - 4):
T
CopyConstructible
Return value
- (1 - 2) The greater of
a
andb
, according to the projection. If they are equivalent, returnsa
. - (3 - 4) The greatest value in
ilist
. If several values are equivalent to the greatest, returns the leftmost such value.
Complexity
- (1 - 2) Exactly one comparison.
- (3 - 4) Exactly
ilist.size() - 1
comparisons.
Exceptions
(none)
Possible implementation
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);
}
Notes
Capturing the result of std::max
by reference produces a dangling reference if one of the parameters is a temporary and that parameter is returned:
int n = 1;
const int& r = std::max(n - 1, n + 1); // r is dangling
Examples
#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 << "Larger of 69 and 96 is " << std::max(69, 96) << "\n"
"Larger of 'q', and 'p' is '" << std::max('q', 'p') << "'\n"
"Largest of 010, 10, 0X10, and 0B10 is "
<< std::max({010, 10, 0X10, 0B10}) << '\n'
<< R"(Longest of "long", "short", and "int" is )"
<< std::quoted(std::max({"long", "short", "int"}, longest)) << '\n';
}
Larger of 69 and 96 is 96
Larger of 'q', and 'p' is 'q'
Largest of 010, 10, 0X10, and 0B10 is 16
Longest of "long", "short", and "int" is "short"
Hover to see the original license.