三、max 的使用

三、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 个。