特定のコンテキストでは、最小関数と最大関数で混乱します。
1つのコンテキストでは、関数を使用して2つの値のうちの大きい方または小さい方を取る場合、問題はありません。例えば、
//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
)and at_least
(for max
)でしょうか?minimize
なぜ彼らが可換であるかを理解するには少し時間がかかるかもしれませんが、彼らは、などよりも意味を伝えていると思います。
min
そしてmax
またminimize
、maximize
あなたが書きたい関数の完全に間違った名前です。デフォルトmin
とmax
はるかに理にかなっています。あなたは実際にALMOSTが関数名を正しく取得しました。この操作は、クランプまたはキャッピングと呼ばれ、2つのキャッピング関数を作成しました。お勧めcapUpperBound
しcapLowBound
ます。誰にどれをするかを説明する必要はありません、それは明らかです。