std::max_element() algorithm
- since C++17
- until C++17
template< class ForwardIt >
ForwardIt max_element( ForwardIt first, ForwardIt last );
// (2)
template< class ForwardIt, class Compare >
ForwardIt max_element( ForwardIt first, ForwardIt last, Compare comp );
// (3)
template< class ExecutionPolicy, class ForwardIt >
ForwardIt max_element( ExecutionPolicy&& policy,
ForwardIt first, ForwardIt last );
// (4)
template< class ExecutionPolicy, class ForwardIt, class Compare >
ForwardIt max_element( ExecutionPolicy&& policy,
ForwardIt first, ForwardIt last, Compare comp );
template< class ForwardIt >
ForwardIt max_element( ForwardIt first, ForwardIt last );
// (2)
template< class ForwardIt, class Compare >
ForwardIt max_element( ForwardIt first, ForwardIt last, Compare comp );
Finds the greatest element in the range [first; last).
-
(1) Elements are compared using
operator<. -
(2) Elements are compared using the given binary comparison function
comp.
Parameters
first last | The range to find the largest element in. |
policy | The execution policy to use. See execution policy for details. |
comp | Comparison function object (i.e. an object that satisfies the requirements of Compare). The signature of the comparison function should be equivalent to the following:
|
Type requirements
RandomIt | LegacyRandomAccessIterator |
Return value
Iterator to the greatest element in the range [first; last).
If several elements in the range are equivalent to the greatest element, returns the iterator to the first such element.
Returns last if the range is empty.
Complexity
Given N as std::distance(first, last):
Exactly max(N - 1, 0) comparisons.
Exceptions
The overloads with a template parameter named ExecutionPolicy report errors as follows:
- If execution of a function invoked as part of the algorithm throws an exception and
ExecutionPolicyis one of the standard policies,std::terminateis called. For any otherExecutionPolicy, the behavior is implementation-defined. - If the algorithm fails to allocate memory,
std::bad_allocis thrown.
Possible implementation
max_element(1)
max_element(2)
Examples
#include <algorithm>
#include <cmath>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v {3, 1, -14, 1, 5, 9};
std::vector<int>::iterator result;
result = std::max_element(v.begin(), v.end());
std::cout << "max element found at index "
<< std::distance(v.begin(), result)
<< " has value " << *result << '\n';
result = std::max_element(v.begin(), v.end(), [](int a, int b)
{
return std::abs(a) < std::abs(b);
});
std::cout << "absolute max element found at index "
<< std::distance(v.begin(), result)
<< " has value " << *result << '\n';
}
max element found at index 5 has value 9
absolute max element found at index 2 has value -14
Hover to see the original license.