template<class FwdIt>
FwdIt max_element(FwdIt first, FwdIt last);
template<class FwdIt, class Pred>
FwdIt max_element(FwdIt first, FwdIt last, Pred pr);
The first template function determines the lowest value of N in the range [0, last - first) such that, for each M in
the range [0, last - first), the predicate *(first + N) < *(first + M) is false. It then returns first + N.
Thus, the function determines the lowest position that contains the largest value in the sequence.
The function evaluates the ordering predicate X < Y exactly max((last - first) - 1, 0) times.
The second template function behaves the same, except that it replaces operator<(X, Y) with pr(X, Y).
Sample programs: max_element and max_element (predicate version).