2011-09-16 11 views
1

このような記述をしたいと思いますが、わかりません。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++) 
+0

これはあなたの質問を読んでいる人には奇妙です。私にとっては、「外」*「外」の表現は、結果として得られる価値などをテストしたいと思うと思います。 – Blindy

+0

私はあなたの最初のところに 'もし'ではないことを意味すると思います。 – mydogisbox

+0

@Blindyタイトルはそれをすべて言っています... – mydogisbox

答えて

5

あなた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 
} 

しかし、あなたの特定のケースでは、これらのどれも理想的ではない最初の二つは本当にクリアコードではなく、それらはすべてintAintB対を評価するため、各繰り返しはループを介して行われます。

int maxAB = MAX(intA, intB); 
for (int i=0; i < maxAB; ++i) 
{ 
    // do stuff 
} 
+0

+1です。要点は、forループ条件が各反復で評価されることです。可能であれば、最後のコードブロックの例でadapalumboが 'maxAB'変数を使って行ったような不必要な評価を避けてください。 – Sam

2

は三項演算子を使用してください。

MAX(a, b) 

が使用できない場合、あなたはそれを定義することができます。

#define MAX(a, b) (((a) > (b)) ? (a) : (b)) 
1

MAXマクロthaの使用:

+0

これらの括弧はすべて必要ですか? – mydogisbox

+0

どのようなパラメータですか? – Macmade

+0

huh?私はパラメタではなくカッコを言った。 – mydogisbox

0
for(int i = 0; i < ((a) < (b) ? (a) : (b)); i++) 
+1

条件式またはオペランドが後方にあります。今、 'a'が小さければ、三項演算子の値は' a' – mydogisbox

0

私はマクロMAXを使用するかについてのステートメントの各実行の前にあれば、余分なステートメントを使用して示唆している:何でも良いでしょうことのようなものです。三項演算子を使用することは、将来の保守をサポートするのに十分ではありません。しかし、それは私の意見です。