std::max (3) Linux Manual Page
std::max – std::max
Synopsis
Defined in header<algorithm>
template <class T>
(until C++ 14)
const T &max(const T &a, const T &b);
template <class T>
(since C++ 14)
constexpr const T &max(const T &a, const T &b);
template <class T, class Compare>
(until C++ 14)
const T &max(const T &a, const T &b, Compare comp);
template <class T, class Compare>
(since C++ 14)
constexpr const T &max(const T &a, const T &b, Compare comp);
(1)
template <class T>
(since C++ 11)
T max(std::initializer_list<T> ilist);
(2)(until C++ 14)
template <class T>
(since C++ 14)
constexpr T max(std::initializer_list<T> ilist);
(3)
template <class T, class Compare>
(since C++ 11)
T max(std::initializer_list<T> ilist, Compare comp);
(4)(until C++ 14)
template <class T, class Compare>
(since C++ 14)
constexpr T max(std::initializer_list<T> ilist, Compare comp);
Returns the greater of the given values.
1-2) Returns the greater of a and b.
3-4) Returns the greatest of the values in initializer list ilist.
The (1,3) versions use operator< to compare the values, the (2,4) versions use the given comparison function comp.
Parameters
a, b – the values to compare
ilist – initializer list with the values to compare
comp – While the signature does not need to have const &, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const) Type1 and Type2 regardless of value_category (thus, Type1 & is not allowed
Type requirements
–
T must meet the requirements of LessThanComparable in order to use overloads (1,3).
–
T must meet the requirements of CopyConstructible in order to use overloads (3,4).
Return value
1-2) The greater of a and b. If they are equivalent, returns a.
3-4) The greatest value in ilist. If several values are equivalent to the greatest, returns the leftmost one.
Complexity
1-2) Exactly one comparison
3-4) Exactly ilist.size() – 1 comparisons
Possible implementation
First version
Second version
Third version
Fourth version
Notes
Capturing the result of std::max by reference if one of the parameters is rvalue produces a dangling reference if that parameter is returned:
int n = 1;
const int &r = std::max(n - 1, n + 1);
// r is dangling
Example
// Run this code
#include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::cout << "larger of 1 and 9999: " << std::max(1, 9999) << '\n'
<< "larger of 'a', and 'b': " << std::max('a', 'b') << '\n'
<< "longest of \"foo\", \"bar\", and \"hello\": " << std::max({"foo", "bar", "hello"}, [](const std::string &s1, const std::string &s2) {
return s1.size() < s2.size();
})
<< '\n';
}
Output:
See also
min (function template)
minmax returns the smaller and larger of two elements
(C++11)
max_element (function template)
