在某些情况下,我对最小和最大函数感到困惑。
在一种情况下,当您使用函数取两个值中的更大或更小值时,就没有问题。例如,
//how many autographed CD's can I give out?
int howManyAutographs(int CDs, int Cases, int Pens)
{
//if no pens, then I cannot sign any autographs
if (Pens == 0)
return 0;
//I cannot give away a CD without a case or a case without a CD
return min(CDs, Cases);
}
简单。但是在另一种情况下,我感到困惑。如果尝试设置最大值或最小值,则会倒退。
//return the sum, with a maximum of 255
int cappedSumWRONG(int x, int y)
{
return max(x + y, 255); //nope, this is wrong
}
//return the sum, with a maximum of 255
int cappedSumCORRECT(int x, int y)
{
return min(x + y, 255); //much better, but counter-intuitive to my mind
}
不能按以下方式进行我自己的功能?
//return x, with a maximum of max
int maximize(int x, int max)
{
return min(x, max);
}
//return x, with a minimum of min
int minimize(int x, int min)
{
return max(x, min)
}
显然,使用内置函数会更快,但这对我来说似乎是不必要的微优化。还有其他原因不建议这样做吗?在小组项目中呢?
std::clamp
函数或类似的东西。
up_to
(for min
)和at_least
(for max
)?我认为它们传达的含义要好于minimize
等等,尽管可能要花一点时间才能理解为什么它们是可交换的。
min
和max
,而且minimize
,maximize
对于要编写的函数来说,它们的名称完全错误。默认min
和max
更有意义。您实际上ALMOST的功能名称正确。此操作称为钳位或加帽,并且您编写了两个加帽功能。我建议capUpperBound
和capLowBound
。很明显,我不必向任何人解释哪个做了。