1

このスニペットに遭遇した場所で、ユニオン検索の問題の実装に取り​​組んでいました。

while (root != id[root])
        root = id[root];

と同じじゃないですか

while ((root = id[root]) != id[root]);

ただし、初期条件が false の場合、2 番目のコンストラクトは代入操作を少なくとも 1 回実行する可能性がありますが、最初のコンストラクトは 1 回も実行しない可能性があります。他に違いはありますか?

4

2 に答える 2

3

それらは非常に異なります。実行される順序を考えてください。

最初にかどうかを確認root != id[root]してからを割り当てroot = id[root]ます。

2番目に、最初に割り当て(ネスト)してからチェックします。

これの通常のイディオムは次のBufferedReaderとおりです。

String line;
while((line=bufferedReader.readLine()) != null) {
}

これを最初の方法に変更すると、次のようになります。

String line;
while(line != null) {
     line=bufferedReader.readLine()
}

while ループにも入りません...

于 2013-09-03T15:52:59.360 に答える
1

いいえ、このように見てください-

int i;

while(i != 10)

int i;
while((i = 10) != 10)
于 2013-09-03T15:52:48.350 に答える