3

私は今、C++ のクラスを取っています。for ループがこのように機能することはわかっていますが、それが「通常」なのか「適切」なのか疑問に思っていました。

for (int i = 0; getline(cin, input); i++)

これは代わりに

int i = 0;
while (getline(cin, input))
    i++;

for ループはカウンター ループであることがわかっているため、私はただ不思議に思っていますが、このループの条件は、私が制御する回数とは関係ありません。

4

6 に答える 6

6

はい、for ループのルールは非常に単純です。ルールを満たしている限り、構文は何でもかまいません。

2つのうち、最も読みやすいものを選択してください。

于 2012-05-02T22:08:13.817 に答える
5

厳密に言えば、forループを作成する「適切な」方法はありません。3つの部分の任意の組み合わせを空白のままにすることができ(実際、K&Rは、「永久」ループを実装するために3つすべてを空白のままにすることをお勧めします)、難しいことはありません。停止条件の要件は、ループカウンタによって異なります。

forループに対するループの利点の1つは、カウンターを増やすことを忘れることなく、体内でwhile自由に使用できることです。continueこれは、多くの埋め込みcontinueステートメントを含むループの読みやすさを向上させる可能性があります。

于 2012-05-02T22:09:43.213 に答える
3

それは問題ありませんが、スタイルの問題として、私はwhileループを好みます。

forループは通常、反復回数が事前にわかっている有界反復に使用され、whileループはより一般的な状況で使用されます。

于 2012-05-02T22:10:13.793 に答える
2

どちらも同じように機能します。ただし、それは彼らが何をするかだけではなく、「人間」がコードを理解しやすくする方法でもあります。

ソースコードは、特定のタスクを実行する方法について話している詳細なドキュメントと考えることができます。実際、非常に詳細であるため、コンパイラー、つまりダムマシンでもそれを理解できます。言い換えれば、あなたは他の人のためにコードを書きます、マシンコードにコンパイルされることは楽しい副作用です。

それを考慮すると、構文構造を驚くべき方法で使用することは最善のアイデアではありません。

于 2012-05-02T22:10:57.053 に答える
1

どちらも機能します。

声明はほとんどのwhile人がそれを書く方法であり、それは理解しやすいです。ステートメントは少し短いですが、ほとんどのfor人はそれが何をしているのかを理解するために二度見なければならないでしょう。

于 2012-05-02T22:10:49.460 に答える
1

私は通常、ループを事前に指定された境界を持つカウントされたループに制限されるとは考えませんが、通常、ループforの一部がループの終了に向けて進行することに直接関与しているループと考えます。increment

たとえば、次のようなリンクリストをたどるのは完全に合理的だと思います。

for (ptr = list_head; ptr != NULL; ptr = ptr->next)
    process(ptr->data);
于 2012-05-02T22:20:14.253 に答える