for(int i(5) ; i-->0 ; )
{
//use i as iterator here
}
これと同じですか
for(int i=5; i>0 ; i--)
??
Googleで同様の宣言を見つけようとしましたが、何も見つかりませんでした
また、同じことを宣言するよりクリーンな方法を提案してください。
for(int i(5) ; i-->0 ; )
{
//use i as iterator here
}
これと同じですか
for(int i=5; i>0 ; i--)
??
Googleで同様の宣言を見つけようとしましたが、何も見つかりませんでした
また、同じことを宣言するよりクリーンな方法を提案してください。
いいえ、これらは同じではありません。最初のケースでi
は、ループ本体が初めて実行される前にデクリメントされます。
実際のデモについては、 http://ideone.com/AbHF3mを参照してください。
いいえ、同じではありません。最初のバージョンはデクリメント前の値を比較し、各反復のi
前にデクリメントを実行します。2 番目はデクリメント後の値を比較し、反復ごとにデクリメントを実行します。
したがって、最初は を反復し{4,3,2,1,0}
、2 番目は を反復し{5,4,3,2,1}
ます。
それは同じではありません。最初のケースでは、 の値はi
最初4
の繰り返しと0
最後の繰り返しになります。2 番目のケースでi
は5
、最初の繰り返しと1
最後の繰り返しになります。
編集
@Y.Ecarri の場合:
最初のケース:
i
に設定5
i > 0
、つまり、5 > 0
i
ます。i
今でしょ4
i
値を持つループの本体を入力してください4
2 番目のケース:
i
に設定5
i > 0
、つまり、5 > 0
i
値を持つループの本体を入力してください5
i
ます。i
今でしょ4
順序は次のとおりであるため、他の人が指摘したものとは異なります。
i
ここのように符号付き int であり、-1 に達することができる場合は、次のように置き換えることができます
for( int i=4; i >= 0; --i ) { // body
その意図はもう少し明白に見えます。size_t などの unsigned int がある場合でも、順序を切り替えることで、その意図をもう少し明確に見せることができます。
for( size_t i = 5; 0 < i--; ) { // body
0 と比較を完全に削除して、次のようにすることもできます。
for( size_t i = 5; i--; ) { // body
i=5
上記の2つの両方で、最初の反復で4として開始したいときに開始するという事実にまだ不快です。したがって、do...while. に切り替えることもできます。もちろんi
、ループの外で初期化する必要があります。
size_t i = 5;
do { // body
--i; // clearly 4 now on first iteration
} while( i != 0 );