我有一个问题,关于循环在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
是由用户给出的,因此我不知道如何在这种情况下完全利用循环展开。
我想知道是否应该在此循环中添加条件,但这告诉我这会减慢我的程序的速度。
答案 0 :(得分:2)
其中n是用户指定的,因此我不知道如何在这种情况下准确利用循环展开
如果n
是由用户给出的,并且您不知道对它的任何约束,那么您(您的编译器)也不应进行循环展开(因为这可能是一个悲观的说法)。如果您确实知道一些知识,例如n
很大,可能 是有益的。
但是,正如@MilesBudnek指出的那样,所有这些都是微优化。除非在此特定循环上每次迭代减少微秒数对您的应用程序至关重要,否则您不应采用这种方法,也不应手动执行任何操作。
答案 1 :(得分:2)
您可以这样做:
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?)。