Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:当for循环';她在跑步吗?_C++_Loops_For Loop_Indexing - Fatal编程技术网

C++ C++;:当for循环';她在跑步吗?

C++ C++;:当for循环';她在跑步吗?,c++,loops,for-loop,indexing,C++,Loops,For Loop,Indexing,我有一个for循环,它搜索一个结构数组以找到一个特定的结构。 现在这个数组的大小可能是10000 在for循环中,我可能会收集一些额外的信息,这些信息将告诉我您要查找的结构的确切位置。因此,如果您的索引当前为“5”,您可能会发现它不在“5”中,而是在“9000”中 所以我使用这些信息来更改索引 现在,代码运行得非常好,没有改变索引,因为它确实找到了所需的信息。但是,如果我100%确信我在这种情况下所做的是正确的,那么为了更快地获得结果,可以更改for循环中的索引吗 提前感谢通常,不(我不是说它在

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

在for循环中,我可能会收集一些额外的信息,这些信息将告诉我您要查找的结构的确切位置。因此,如果您的索引当前为“5”,您可能会发现它不在“5”中,而是在“9000”中

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

现在,代码运行得非常好,没有改变索引,因为它确实找到了所需的信息。但是,如果我100%确信我在这种情况下所做的是正确的,那么为了更快地获得结果,可以更改for循环中的索引吗

提前感谢

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

如果你增加它,你偶尔会使索引太大。例如,如果您正在访问数组元素,您可以尝试像这样访问脱离绑定的元素,依此类推

如果您想修改循环内的索引,您应该始终了解自己在做什么,并可能在循环本身内添加一些附加条件检查,以避免出现奇怪的行为


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

绝对正常。该语言不区分在循环体中更改索引和在循环头中的increment语句中更改索引

for (initializer-statement; condition-statement; increment-statement)
    loop-body;
基本相当于

{
    initializer-statement;
    while (condition-statement) {
        loop-body;
        increment-statement;
    }
}
一个区别是
for
循环的
循环体中的
continue
语句仍将执行
increment语句
,如果您没有预料到,这可能会导致问题


还要注意不要通过超出终止条件而创建无限循环。

只要不使代码过于复杂,就可以更改索引


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

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

您可以将您的循环转换为
while
循环,以获得100%的置信度。如果您愿意,可以修改变量,但如果不仔细考虑并正确实施,可能会导致复杂化。绝对确保这是您真正想要做的。我会使用
循环,正如@ulidtko所建议的:)我不同意。你必须采取一些预防措施,当然,但是对于循环报头,在正常的<代码>中不比.@ Gorpik,是这样,但是对于C++学习者来说,这可能是很多错误的原因,所以我想指出,所有的事情都必须正确地检查。我见过很多次,当人们仅仅因为修改了
for
中的索引而产生bug时,我就忘记了:另一个问题是,当你看到for循环时,你开始假设身体中的这些恶作剧不是真的。不完全是这样。注意
循环体中的
continue
。只是为了好玩,我编写了一个实现:break and continue do work:)它也不是完美的,因为变量名可能会发生冲突。