繁体   English   中英

C ++:在for循环运行时更改for循环的索引是不是一种糟糕的方法?

[英]C++: is it a bad method to change the index of a for loop while it's running?

我有一个for循环搜索结构数组,以便找到一个特定的结构。 现在这个数组的大小可能是10000。

在for循环中,我可能会收集一些额外的信息,告诉我你正在寻找的结构到底在哪里。 因此,如果您的索引当前为'5',您可能会发现它不是'5'而是'9000'。

所以我使用这些信息来改变索引。

现在代码工作完全正常而不改变索引,因为它确实找到了所需的信息。 但是,如果我100%确定我正在做的事情在这种情况下是正确的,是否可以更改for循环中的索引以便更快地获得结果?

提前致谢

这绝对没问题。 该语言不区分更改循环体中的索引和在循环头中的增量语句中更改它。

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

大多相当于

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

一个区别是for循环的循环体内的continue语句仍然会执行increment-statement ,如果你不期望它会导致问题。

另外要注意,不要通过超越终止条件来创建无限循环。

嗯,通常,不(我并不是说它在某种程度上受到限制,你完全可以做到),只是为了理解你自己的程序逻辑。 它可能导致许多错误。 如果减少循环中的索引,最终可能会出现无限循环。

如果你增加它,你偶尔会使索引太大。 例如,如果您正在访问数组元素,您可能会尝试访问这样的out-of-bonds元素,依此类推。

如果你想修改循环中的索引,你应该总是理解你在做什么,并且可能在循环内部添加一些额外的条件检查以避免奇怪的行为。

如果在你的情况下它工作正常,那么它没有任何问题。

只要它不会使代码过于复杂,那么更改索引是完全可以的。

实际上,您可能希望将位置“提示”与实际数据分开,这可能会为您提供更简单的方法来处理这两者。

非常好。 如果应用程序有任何性能提升,则必须添加此类更改(提供,更改不会妨碍您的功能)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM