C++算法minmax()函数有以下3种使用方式:
- 它比较在其参数中传递的两个值并返回它们之间的较小和较大的值,如果两者相等,则返回 make_pair (a,b)。
- 它还使用由用户定义的二元函数比较这两个值,然后在 std::minmax( 中作为参数传递)。
- 它还用于查找给定列表中的最小元素和最大元素,如果有多个,则返回第一个最小,如果列表中有多个最大,则返回最后一个。
第一个版本使用 operator< 比较元素,第二个版本使用给定的二进制比较函数 comp 比较元素。
用法
default (1) template <class T>
pair <const T&,const T&> minmax (const T& a, const T& b);
//until C++ 14
custom (2) template <class T, class Compare>
pair <const T&,const T&> minmax (const T& a, const T& b, Compare comp);
//until C++ 14
initializer list (3) template <class T>
pair<T,T> minmax (initializer_list<T> il);
template <class T, class Compare>
pair<T,T> minmax (initializer_list<T> il, Compare comp);
// until C++ 14
default (1) template <class T>
constexpr pair <const T&,const T&> minmax (const T& a, const T& b);
//since C++ 14
custom (2) template <class T, class Compare>
constexpr pair <const T&,const T&> minmax (const T& a, const T& b,
Compare comp););
//since C++ 14
initializer list (3) template <class T>
constexpr pair<T,T> minmax (initializer_list<T> il);
template <class T, class Compare>
constexpr pair<T,T> minmax (initializer_list<T> il, Compare comp);
//since C++ 14
参数
a:要比较的第一个值。
b:要比较的第二个值。
comp: 一个用户定义的二元谓词函数,它接受两个参数,如果两个参数按顺序返回真,否则返回假。它遵循严格的弱排序来对元素进行排序。
il:一个 initializer_list 与要比较的值。
返回值
它返回较小的作为第一个元素,较大的作为 a 和 b 之间的第二个元素。如果值相等,则返回 make_pair (a,b)。
返回 il 中的最小值作为第一个值和最大值作为第二个值。如果几个值等价于更小,则返回最左边的这样的值,几个值等价于更大的,返回最右边的这样的值。
复杂度
复杂性是比较元素数量的一倍半。
异常
如果任何比较引发异常,则此函数将引发异常。
请注意,无效参数会导致未定义的行为。
例子1
让我们看一个简单的例子来演示 minmax() 的使用:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
// declaring pair to catch the return value
pair<int, int> mnmx;
// Using minmax(a, b)
mnmx = minmax(53, 23);
// printing minimum and maximum values
cout << "The minimum value obtained is:";
cout << mnmx.first;
cout << "\nThe maximum value obtained is:";
cout << mnmx.second ;
// Using minmax((array of elements)
mnmx = minmax({2, 5, 1, 6, 3});
// printing minimum and maximum values.
cout << "\n\nThe minimum value obtained is:";
cout << mnmx.first;
cout << "\nThe maximum value obtained is:";
cout << mnmx.second;
return 0;
}
输出:
The minimum value obtained is:23 The maximum value obtained is:53 The minimum value obtained is:1 The maximum value obtained is:6
例子2
让我们看另一个简单的例子来演示使用默认版本的 minmax() 的使用:
#include <iostream> // std::cout
#include <algorithm> // std::minmax
using namespace std;
int main () {
auto result = minmax({1,2,3,4,5});
cout << "minmax({1,2,3,4,5}):";
cout << result.first << ' ' << result.second << '\n';
return 0;
}
输出:
minmax({1,2,3,4,5}):1 5
例子3
让我们看另一个简单的例子来演示使用比较函数的 minmax() 的使用:
#include <algorithm>
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
vector<int> v {3, 1, 4, 1, 5, 9, 2, 6};
srand(time(0));
pair<int, int> bounds = minmax(rand() % v.size(),
rand() % v.size());
cout << "v[" << bounds.first << "," << bounds.second << "]:";
for (int i = bounds.first; i < bounds.second; ++i) {
cout << v[i] << ' ';
}
cout << '\n';
return 0;
}
输出:
v[0,7]:3 1 4 1 5 9 2
相关用法
- C++ Algorithm minmax_element()用法及代码示例
- 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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。