std::
minmax_element
函数模板 <algorithm>
default (1) |
template <class ForwardIterator>
pair<ForwardIterator,ForwardIterator>
minmax_element (ForwardIterator first, ForwardIterator last); |
custom (2) |
template <class ForwardIterator, class Compare>
pair<ForwardIterator,ForwardIterator>
minmax_element (ForwardIterator first, ForwardIterator last, Compare comp); |
返回范围内最小和最大的元素
返回一个迭代器的pair,其中指向范围[first,last)中最小的元素,作为 first,
指向最大的元素作为second。
第一个版本使用 operator< 进行比较,第二个版本使用comp操作符进行比较;
如果有多个等价元素的值最小,则第一个迭代器指向这些元素中的第一个。
如果有多个等价元素具有最大的值,则第二个迭代器指向这些元素的最后一个。
☲ 参数
-
first, last
-
指向比较序列的初始和最终位置的输入迭代器。使用的范围是[first,last],
它包含first和last之间的所有元素,包括first所指的元素,
但不包括last所指的元素。
-
comp
-
接受范围内的两个元素作为参数,并返回可转换为bool类型的值的二元函数。
返回的值表明作为第一个参数传递的元素是否被认为小于第二个参数。
函数不能修改它的任何参数。
它可以是一个函数指针,也可以是一个函数对象。
☉ 返回值
一个pair,第一个元素为范围[first,last)中最小的元素,第二个元素为最大的元素。
Pair是在<utility>中定义的类模板。
☣ 示例
// 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)范围内的对象被访问。
☂ 异常安全性
如果任何比较抛出,则抛出。
注意,无效的参数会导致未定义的行为。
🍄 另请参阅
minmax |
返回最小和最大的元素(函数模板) |
lower_bound |
返回迭代器下界(函数模板) |
max_element |
返回范围内最大的元素(函数模板) |
min_element |
返回范围内最小的元素(函数模板) |
upper_bound |
返回迭代器上界(函数模板) |