Я запутался в функциях min и max в определенных контекстах.
В одном контексте, когда вы используете функции для получения большего или меньшего из двух значений, это не проблема. Например,
//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(для min) и at_least(для max)? Я думаю, что они передают значение лучше, чем minimize, и т. Д., Хотя может потребоваться мгновение, чтобы понять, почему они коммутативны.
minа maxтакже и также minimizeи maximizeсовершенно неправильные названия для функций, которые вы хотите написать. По умолчанию minи maxимеет гораздо больше смысла. Вы фактически ПОЛУЧИЛИ правильные имена функций. Эта операция называется фиксацией или укупоркой, и вы написали две функции укупорки. Я бы предложил capUpperBoundи capLowBound. Мне не нужно никому объяснять, что делает, это очевидно.