函数模板
<algorithm>

std::minmax_element

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

第一个版本使用 operator< 进行比较,第二个版本使用 comp 进行比较。

如果存在多个等价的最小元素,第一个迭代器指向其中第一个元素。

如果存在多个等价的最大元素,第二个迭代器指向其中最后一个元素。

参数

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

返回值

一个pair,其第一个元素是指向范围 [first,last) 中值最小的元素的迭代器,第二个元素是指向值最大的元素的迭代器。

pair 是一个在 <utility> 中定义的类模板。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// minmax_element
#include <iostream>     // std::cout
#include <algorithm>    // std::minmax_element
#include <array>        // std::array

int main () {
  std::array<int,7> foo {3,7,2,9,5,8,6};

  auto result = std::minmax_element (foo.begin(),foo.end());

  // print result:
  std::cout << "min is " << *result.first;
  std::cout << ", at position " << (result.first-foo.begin()) << '\n';
  std::cout << "max is " << *result.second;
  std::cout << ", at position " << (result.second-foo.begin()) << '\n';

  return 0;
}

输出
min is 2, at position 2
max is 9, at position 3


复杂度

最多线性于 1.5 倍比比较的元素数量减一。

数据竞争

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

异常

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

另见