三、max 的使用
-
- [C 语言的 max](#C 语言的 max)
- [C++ 标准库的 `std::max`](#C++ 标准库的
std::max)
C 语言的 max
有时编译器会给出如下的错误:
c
Line 18: Char 16: error: no matching function for call to 'max'
原因可能是:
1,没有正确包含头文件。
c
#include <algorithm>
2,max中的两个参数类型不同。
比如
c++
int add()
{
int a = 0;
size_t b = 10;
return max(a,b);
}
明显的是a,b参数的类型不同,那么就会报错。
还要注意的一点是:比较a,b直接max(a,b)即可,如果是a,b,c呢?max(max(a,b), c);需要嵌套调用,一共调用两次。
C++ 标准库的 std::max
而如果使用的是 C++ 标准库的 std::max
两个参数,但类型不必完全相同
类型不同时,必须能隐式转换为同一种比较类型,否则编译报错。
c
int a = 10;
double b = 20.5;
// 返回类型推导为 double
auto m = std::max(a, b); // m = 20.5
多个参数比较(C++11)
std::max 还支持通过 initializer_list 一次性比较多个值:
c
int m = std::max({3, 1, 4, 1, 5, 9}); // m = 9
另外还有一个带自定义比较器的三参数版本:
c
std::max(3, 5, [](int a, int b){ return a < b; });
这其实也是两个要比较的值加上一个比较仿函数,参数个数是 3,但比较的对象还是 2 个。