numeric_limits特性应该是获得各种类型信息的一般方式,能够做到这样的事情
template<typename T>
T min(const std::vector<T>& vect)
{
T val = std::numeric_limits<T>::min();
for(int i=0 ; i<vect.size() ; i++)
val = max(T, vect[i]);
return val;
}
Run Code Online (Sandbox Code Playgroud)
问题是(至少使用MS Visual Studio 2008)numeric_limits <int> :: min()返回最小的负数,而numeric_limits <double> :: min()返回最小的正数!
谁知道这个设计背后的理性呢?是否有更好的(推荐?)方式使用numeric_limits?在我上面的具体功能中,我当然可以将T初始化为vect [0],但这不是我要找的答案.
又见(浮点专用)的讨论 在这里
解决方法是
double val = -std::numeric_limits<double>::max();
Run Code Online (Sandbox Code Playgroud)
当然,这并不能解释 numerics_limits::min() 的奇怪行为,这可能是由于整数有不同的最小/最大边界(min = -2^n,max = 2^n- 1) 但不适用于双打。