函数模板
<algorithm>

std::max_element

默认 (1)
template <class ForwardIterator>  ForwardIterator max_element (ForwardIterator first, ForwardIterator last);
自定义 (2)
template <class ForwardIterator, class Compare>  ForwardIterator max_element (ForwardIterator first, ForwardIterator last,                               Compare comp);
返回范围内的最大元素
返回一个迭代器,指向范围 [first,last) 中值最大的元素。

比较是使用第一个版本的 operator<,或者第二个版本的 comp;如果不存在其他元素小于该元素,则该元素为最大。如果多个元素满足此条件,则返回的迭代器指向满足条件的首个元素。

此函数模板的行为等同于
1
2
3
4
5
6
7
8
9
10
11
template <class ForwardIterator>
  ForwardIterator max_element ( ForwardIterator first, ForwardIterator last )
{
  if (first==last) return last;
  ForwardIterator largest = first;

  while (++first!=last)
    if (*largest<*first)    // or: if (comp(*largest,*first)) for version (2)
      largest=first;
  return largest;
}

参数

first, last
输入迭代器,指向要比较的序列的初始和末尾位置。范围为 [first,last),包含 first 指向的元素以及 first 和 last 之间的所有元素,但不包含 last 指向的元素。
comp
二元函数,接受范围中的两个元素作为参数,并返回一个可转换为 bool 的值。返回的值指示第一个参数传递的元素是否被视为小于第二个参数。
该函数不得修改其任何参数。
这可以是函数指针,也可以是函数对象。

返回值

指向范围中最大值的迭代器,如果范围为空则返回 last

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// min_element/max_element example
#include <iostream>     // std::cout
#include <algorithm>    // std::min_element, std::max_element

bool myfn(int i, int j) { return i<j; }

struct myclass {
  bool operator() (int i,int j) { return i<j; }
} myobj;

int main () {
  int myints[] = {3,7,2,5,6,4,9};

  // using default comparison:
  std::cout << "The smallest element is " << *std::min_element(myints,myints+7) << '\n';
  std::cout << "The largest element is "  << *std::max_element(myints,myints+7) << '\n';

  // using function myfn as comp:
  std::cout << "The smallest element is " << *std::min_element(myints,myints+7,myfn) << '\n';
  std::cout << "The largest element is "  << *std::max_element(myints,myints+7,myfn) << '\n';

  // using object myobj as comp:
  std::cout << "The smallest element is " << *std::min_element(myints,myints+7,myobj) << '\n';
  std::cout << "The largest element is "  << *std::max_element(myints,myints+7,myobj) << '\n';

  return 0;
}

输出
The smallest element is 2
The largest element is 9
The smallest element is 2
The largest element is 9
The smallest element is 2
The largest element is 9


复杂度

线性时间,等于元素数量减一的比较次数。

数据竞争

访问范围 [first,last) 中的对象。

异常

如果任何比较操作抛出异常,则该函数抛出异常。
请注意,无效参数会导致未定义行为

另见