まだ誰も思いついていないように思える別の答えがあります。 for
シーケンスを反復処理する必要がある場合は、ループを使用する必要があります。使用!=
は、ループの終了条件を記述する最も簡潔な方法です。ただし、制限の少ない演算子を使用することは、非常に一般的な防御プログラミングのイディオムです。整数の場合、それは重要ではありません-より具体的な例のない単なる個人的な選択です。!=
他の人が述べた理由で、使用したいイテレータでコレクションをループします。float
またはのシーケンスを検討する場合、すべてのコストdouble
を回避する必要!=
があります。
私が指摘したいのはfor
、シーケンスを繰り返す必要があるときに使用されることです。生成されたシーケンスには、開始点、間隔、および終了条件があります。これらは、for
ステートメント内で簡潔に指定されています。(1)のステップ部分が含まれていない、for
または(2)true
ガード条件として何かを指定している場合は、for
ループを使用しないでください!
while
ループは、特定の条件が満たされている間、処理を継続するために使用されます。 シーケンスを処理していない場合は、while
代わりにループが必要です。ガード条件の引数はここでは似ていますが、a while
とfor
ループの決定は非常に意識的なものでなければなりません。while
IMO C ++サークルに理解下ループです。
アイテムのコレクションを処理している場合(非常に一般的なfor
-loopの使用法)、実際にはより特殊な方法を使用する必要があります。残念ながら、std::for_each
C ++ではいくつかの理由でかなり苦痛です。多くの場合、for
ループの本体を独立した関数で分離すると(多少痛みを伴いますが)、結果としてよりクリーンなソリューションになります。 コレクションで作業する場合、検討するstd::for_each
、std::transform
またはstd::accumulate
。 この方法で表現すると、多くのアルゴリズムの実装が簡潔で明確になります。言うまでもなく、ループの本体を別の関数/メソッドに分離すると、アルゴリズム、その入力要件、および結果に専念することになります。
Java、Python、Ruby、またはC ++ 0xを使用している場合は、適切なコレクションforeachループを使用する必要があります。C ++コンパイラがこの機能を実装for
すると、これらの種類の議論と同様に、多くのループがなくなります。
int i = 10; while(i --> 0) { /* stuff */ }