C++ 算法 minmax_element() 函数用于返回一个pair,其中迭代器指向范围[first, last) 中的最小值作为第一个元素,最大的作为第二个元素。
如果多个值等价于更小,则第一个迭代器指向这样的值中的第一个,多个值等价于更大的值,第二个迭代器指向这样的值中的最后一个。
对于第一个版本使用运算符 < 比较元素,或者对于第二个版本使用给定的二进制比较函数 comp 比较元素。
用法
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);
参数
first:一个输入迭代器,指示要比较的范围的第一个位置。
last:一个输入迭代器,指示要比较的范围中过去的最后一个元素。
comp: 一个用户定义的二元谓词函数,它接受两个参数,如果两个参数按顺序返回真,否则返回假。它遵循严格的弱排序来对元素进行排序。
il:一个 initializer_list 与要比较的值。
返回值
它将较小的值作为第一个元素返回,较大的值作为 [first, last) 范围内的第二个元素返回。
如果多个值等价于更小,则第一个迭代器指向这样的值中的第一个,多个值等价于更大的值,第二个迭代器指向这样的值中的最后一个。
复杂度
复杂度是线性的,比所比较的元素数量少 1.5 倍。
数据竞争
访问范围 [first, last) 中的对象。
异常
如果任何比较引发异常,则此函数将引发异常。
注意:无效的参数会导致未定义的行为。
例子1
让我们看一个简单的例子来演示 minmax_element() 的使用:
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v = { 3, 9, 1, 4, 2, 5, 9 };
auto result = minmax_element(v.begin(), v.end());
cout << "min element at:" << (result.first - v.begin()) << '\n';
cout << "max element at:" << (result.second - v.begin()) << '\n';
return 0;
}
输出:
min element at:2 max element at:6
例子2
让我们看另一个简单的例子来演示使用默认版本的 minmax_element() 的使用:
#include <iostream> // std::cout
#include <algorithm> // std::minmax_element
#include <array> // std::array
using namespace std;
int main () {
array<int,7> foo {3,7,2,9,5,8,6};
auto result = minmax_element (foo.begin(),foo.end());
// print result:
cout << "min is " << *result.first;
cout << ", at position " << (result.first-foo.begin()) << '\n';
cout << "max is " << *result.second;
cout << ", at position " << (result.second-foo.begin()) << '\n';
return 0;
}
输出:
min is 2, at position 2 max is 9, at position 3
例子3
让我们看另一个简单的例子来演示使用比较函数的 minmax_element() 的使用:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
// initializing vector of integers
vector<int> vi = { 5, 3, 4, 4, 3, 5, 3 };
// declaring pair pointer to catch the return value
pair<vector<int>::iterator, vector<int>::iterator> mnmx;
// using minmax_element() to find
// minimum and maximum element
// between 0th and 3rd number
mnmx = minmax_element(vi.begin(), vi.begin() + 4);
// printing position of minimum and maximum values.
cout << "The minimum value position obtained is:";
cout << mnmx.first - vi.begin() << endl;
cout << "The maximum value position obtained is:";
cout << mnmx.second - vi.begin() << endl;
cout << endl;
// using duplicated
// prints 1 and 5 respectively
mnmx = minmax_element(vi.begin(), vi.end());
// printing position of minimum and maximum values.
cout << "The minimum value position obtained is:";
cout << mnmx.first - vi.begin() << endl;
cout << "The maximum value position obtained is:";
cout << mnmx.second - vi.begin()<< endl;
return 0;
}
输出:
The minimum value position obtained is:1 The maximum value position obtained is:0 The minimum value position obtained is:1 The maximum value position obtained is:5
相关用法
- C++ Algorithm minmax()用法及代码示例
- C++ Algorithm min()用法及代码示例
- C++ Algorithm min_element()用法及代码示例
- C++ Algorithm max_element()用法及代码示例
- C++ Algorithm max()用法及代码示例
- C++ Algorithm merge()用法及代码示例
- C++ Algorithm make_heap()用法及代码示例
- C++ Algorithm remove_if()用法及代码示例
- C++ Algorithm remove()用法及代码示例
- C++ Algorithm set_union()用法及代码示例
- C++ Algorithm next_permutation()用法及代码示例
- C++ Algorithm upper_bound()用法及代码示例
- C++ Algorithm remove_copy_if()用法及代码示例
- C++ Algorithm random_shuffle()用法及代码示例
- C++ Algorithm pop_heap()用法及代码示例
- C++ Algorithm replace()用法及代码示例
- C++ Algorithm set_intersection()用法及代码示例
- C++ Algorithm lower_bound()用法及代码示例
- C++ Algorithm transform()用法及代码示例
- C++ Algorithm set_difference()用法及代码示例
注:本文由纯净天空筛选整理自 C++ Algorithm minmax_element()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。