2

特定の構造を見つけるために構造の配列を検索する for ループがあります。現在、この配列のサイズは 10000 です。

for ループ内で、探している構造が正確にどこにあるかを示す追加情報を収集する場合があります。したがって、インデックスが現在「5」の場合、「5」ではなく「9000」であることがわかる場合があります。

したがって、この情報を使用してインデックスを変更します。

これで、必要な情報が見つかるという意味で、コードはインデックスを変更しなくても問題なく動作します。ただし、この場合、私がやっていることは正しいと 100% 確信している場合、結果をより速く取得するために for ループのインデックスを変更しても問題ありませんか?

前もって感謝します

4

4 に答える 4

9

全然大丈夫です。この言語では、ループ本体でのインデックスの変更と、ループ ヘッダー内のインクリメント ステートメントでのインデックスの変更が区別されません。

for (initializer-statement; condition-statement; increment-statement)
    loop-body;

ほとんど同等です

{
    initializer-statement;
    while (condition-statement) {
        loop-body;
        increment-statement;
    }
}

1 つの違いはcontinue、ループのループ本体内のステートメントforが引き続き を実行するincrement-statementことです。これは、予期しない場合に問題を引き起こす可能性があります。

また、終了条件をオーバーランして無限ループを作成しないように注意してください。

于 2012-08-07T10:03:37.950 に答える
3

まあ、通常はいいえ (なんらかの方法で制限されているという意味ではありません。完全に実行できます)、独自のプログラム ロジックを理解するためだけに。多くのエラーが発生する可能性があります。ループ内でインデックスを減らすと、無限ループになる可能性があります。

大きくすると、インデックスが大きくなりすぎる場合があります。たとえば、配列要素にアクセスしている場合、このように結合外の要素にアクセスしようとすることがあります。

ループ内でインデックスを変更したい場合は、自分が何をしているのかを常に理解する必要があり、奇妙な動作を避けるために、ループ自体の内部に条件チェックを追加する必要があります。

あなたの場合、問題なく動作する場合は、何も問題はありません。

于 2012-08-07T10:03:10.817 に答える
1

コードが過度に複雑にならない限り、インデックスを変更しても問題ありません。

実際、場所の「ヒント」を実際のデータから分離したい場合があります。これにより、両方を処理する簡単な方法が得られる場合があります。

于 2012-08-07T10:04:45.403 に答える
1

まったく問題ありません。アプリケーションのパフォーマンスが向上する場合は、そのような変更を追加する必要があります(ただし、変更によって機能が妨げられない場合)。

于 2012-08-07T10:08:55.763 に答える