【发布时间】:2017-07-09 15:23:50
【问题描述】:
我能想到至少三种选择循环方向的方法。
两个循环,一个开始的条件(也许是最快的?):
if (!backwards)
for (int i = 0; i <= end; i++) {
// code
}
else
for (int i = end; i >= 0; i--){
// code
}
循环一些元素,在里面测试和递增(我用这个):
for (int l = 0; l < max_len; l++) {
// code
if (!backward)
i++;
else
i--;
}
使用可变增量和结束值(可能是最差的?)
if (backward)
inc = -1;
else
inc = 1;
for (int i = 0; i != end; i += inc) {
// code
}
哪种方式更快?编译器是否在每种情况下都对其进行优化?
【问题讨论】:
-
第二个解决方案可能是最糟糕的(顺便说一句,错误的,我让你找出原因)。是什么让您认为第三种解决方案最糟糕?
-
第三种解决方案也是错误的。起始值有点偏离。
-
糟糕,谢谢!是的,对于最后一个,结束应结束+1或结束-1,具体取决于增量。对于第一个,我不明白为什么它看起来应该关闭?
-
不可能在这个级别回答“最快”类型的问题,因为答案可能会因许多因素(如 CPU 规格、优化、缓存等)而有所不同。跨度>
-
我的第一个想法是第一个是最快的
标签: c loops optimization