このような記述をしたいと思いますが、わかりません。forループ内のstatmentの場合
for(int i = 0; i < (the greater value between intA and intB); i++)
誰も私を助けてもらえますか?
for(int i = 0; i < (intA > intB ? intA : intB); i++)
このような記述をしたいと思いますが、わかりません。forループ内のstatmentの場合
for(int i = 0; i < (the greater value between intA and intB); i++)
誰も私を助けてもらえますか?
for(int i = 0; i < (intA > intB ? intA : intB); i++)
あなたfor
文の途中で表現が正確にどのif
文のように動作します。式がtrueと評価されたときだけループが継続します。だから、あなたが欲しいものを書くためのいくつかの論理的に等価な方法があります。
// using a ternary operator
for (int i=0; i < ((intA > intB) ? intA : intB); ++i)
{
// do stuff
}
// using a simple Boolean OR
for (int i=0; i < intA || i < intB; ++i)
{
// do stuff
}
// using a MAX macro
for (int i=0; i < MAX(intA, intB); ++i)
{
// do stuff
}
しかし、あなたの特定のケースでは、これらのどれも理想的ではない最初の二つは本当にクリアコードではなく、それらはすべてintA
にintB
対を評価するため、各繰り返しはループを介して行われます。
int maxAB = MAX(intA, intB);
for (int i=0; i < maxAB; ++i)
{
// do stuff
}
+1です。要点は、forループ条件が各反復で評価されることです。可能であれば、最後のコードブロックの例でadapalumboが 'maxAB'変数を使って行ったような不必要な評価を避けてください。 – Sam
は三項演算子を使用してください。
MAX(a, b)
が使用できない場合、あなたはそれを定義することができます。
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
MAXマクロthaの使用:
for(int i = 0; i < ((a) < (b) ? (a) : (b)); i++)
条件式またはオペランドが後方にあります。今、 'a'が小さければ、三項演算子の値は' a' – mydogisbox
私はマクロMAXを使用するかについてのステートメントの各実行の前にあれば、余分なステートメントを使用して示唆している:何でも良いでしょうことのようなものです。三項演算子を使用することは、将来の保守をサポートするのに十分ではありません。しかし、それは私の意見です。
これはあなたの質問を読んでいる人には奇妙です。私にとっては、「外」*「外」の表現は、結果として得られる価値などをテストしたいと思うと思います。 – Blindy
私はあなたの最初のところに 'もし'ではないことを意味すると思います。 – mydogisbox
@Blindyタイトルはそれをすべて言っています... – mydogisbox