我有一个关于 for 循环中的循环展开以及如何在 for 循环中使用的问题,因为在用户输入之前您不知道迭代次数。
我见过在循环中展开循环的示例,其中给出了迭代次数,并且在一次迭代中执行了更多指令。例如:
for(int i=0; i < 50; i++){ // instead of i < 200
doSomething();
doSomething();
doSomething();
doSomething();
}
我的问题具体针对
for(i=0; i<n; i++){
doSomething();
}
其中n
是由用户给出的,所以我不知道如何在这种情况下准确地利用循环展开。
我想知道是否应该向这个循环添加条件,但这告诉我这会减慢我的程序速度。
最佳答案
你可以这样做:
int i = 0;
while (i<=n-4) {
doSomething();
doSomething();
doSomething();
doSomething();
i += 4;
}
while (i<n) {
doSomething();
i++;
}
您可能需要用 3 个 if
替换第二个循环(因为循环体最多执行 3 次)。
请注意,优化编译器通常会自动执行这种转换,因此您不必这样做(除非它们不这样做: Why is an integer array search loop slower in C++ than Java? )。
关于c++ - 通过循环展开优化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56227416/