今天发现一个小问题,记录一下,解决以前的疑惑。
以前经常这样写代码:
int main()
{
vector nums = {1, 2 ,3};
int res = 0; // int
res = max(res, nums.size()); // size_t
cout << res << endl;
return 0;
}
但这样连编译都不能通过:
在编译器时可以明显看到错误,是模板参数不匹配,但是我们在刷题或者笔试的时候因为紧张而忘记这种提示,极易发生错误,以前甚至怀疑官方未加入头文件"algorithm"而自己写一个max函数。在STL实现中,max函数的原型为:
而size()函数的返回值的参数类型为:
所以我们需要修改参数,使得传入的参数一致:
int main()
{
vector nums = {1, 2 ,3};
//int res = 0;
//res = max(res, (int)nums.size());
size_t res = 0;
res = max(res, nums.size());
cout << res << endl;
return 0;
}
min函数同理。



