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;
    }
}

一个区别是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 回答