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に設定5i > 0、つまり、5 > 0iます。i今でしょ4i値を持つループの本体を入力してください42 番目のケース:
iに設定5i > 0、つまり、5 > 0i値を持つループの本体を入力してください5iます。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 );