导入
min、max 和 minmax 函数
这一系列函数允许我们在一组数据中查找最小值和最大值。让我们来看看具体如何实现。
所需头文件
min、max 和 minmax 函数的多种变体可用于值和初始化列表,这些函数需要包含头文件 <algorithm>。类似地,函数 std::move、std::forward 和 std::swap 也可用于任意值,这三个函数定义在头文件 <utility> 中。
std::min、std::max 和 std::minmax
在头文件 <algorithm> 中定义的函数 std::min、std::max 和 std::minmax 可作用于值或初始化列表,并返回所请求的结果值。对于 std::minmax,返回的是一个 std::pair 类型对象:其中第一个元素为最小值,第二个元素为最大值。默认情况下使用小于运算符(<)进行比较,但你可以提供自定义的比较操作符。该自定义函数需接受两个参数并返回一个布尔值。这类返回 true 或 false 的函数称为谓词(predicate)。
1// minMax.cpp 2#include <iostream> 3#include <algorithm> 4//... 5using std::cout; 6//... 7int main(){ 8 cout << "std::min(2011, 2014):\t\t\t "; 9 cout << std::min(2011, 2014)<<"\n"; // 2011 10 11 cout << "std::min({3, 1, 2011, 2014, -5}):\t"; 12 cout << std::min({3, 1, 2011, 2014, -5})<<"\n"; // -5 13 14 cout << "std::min(-10, -5, [](...) {...}):\t\t"; 15 cout << std::min(-10, -5, [](int a, int b) 16 { return std::abs(a) < std::abs(b); })<<"\n\n"; // -5 17 18 std::pair<int, int> pairInt= std::minmax(2011, 2014); 19 auto pairSeq= std::minmax({3, 1, 2011, 2014, -5}); 20 auto pairAbs= std::minmax({3, 1, 2011, 2014, -5}, [](int a, int b) 21 { return std::abs(a) < std::abs(b); }); 22 23 cout << "pairInt.first, pairInt.second:\t\t"; 24 cout << pairInt.first << ", " << pairInt.second << "\n"; // 2011,2014 25 26 cout << "pairSeq.first, pairSeq.second:\t\t"; 27 cout << pairSeq.first << ", " << pairSeq.second << "\n"; // -5,2014 28 29 cout << "pairAbs.first, pairAbs.second:\t\t "; 30 cout << pairAbs.first << ", " << pairAbs.second << "\n"; // 1,2014 31 32 return 0; 33}
下表总结了 std::min、std::max 和 std::minmax 各种形式的功能:
| 函数 | 说明 |
|---|---|
min(a, b) | 返回 a 和 b 中的较小值。 |
min(a, b, comp) | 根据谓词 comp 比较,返回 a 和 b 中的较小值。 |
min(initializer list) | 返回初始化列表中的最小值。 |
min(initializer list, comp) | 根据谓词 comp 比较,返回初始化列表中的最小值。 |
max(a, b) | 返回 a 和 b 中的最大值。 |
max(a, b, comp) | 根据谓词 comp 比较,返回 a 和 b 中的最大值。 |
max(initializer list) | 返回初始化列表中的最大值。 |
max(initializer list, comp) | 根据谓词 comp 比较,返回初始化列表中的最大值。 |
minmax(a, b) | 返回 a 和 b 中的最小值和最大值,组成一个 pair。 |
minmax(a, b, comp) | 根据谓词 comp 比较,返回 a 和 b 中的最小值和最大值。 |
minmax(initializer list) | 返回初始化列表中的最小值和最大值。 |
minmax(initializer list, comp) | 根据谓词 comp 比较,返回初始化列表中的最小值和最大值。 |
std::min、std::max 和 std::minmax 的各种形式
接下来,我们介绍另一个有用的函数:std::move。