嵌套循环逻辑在索引等于外部循环索引时跳过内部循环。
在内部循环中使用if语句来达到以下效果:
for (i=0;i<N;i++)
for (j=0;j<N;j++)
if (j!=i)
... some code
我相信这会给我带来预期的结果,但是有一种我可能不知道的CPU消耗较少的方法吗?
答案 0 :(得分:0)
您可以将内部循环分成2个独立的for
循环以减少测试次数:
for (i = 0; i < N; i++) {
for (j = 0; j < i; j++) {
... some code
}
/* here we have j == i, skip this one */
j++;
for (; j < N; j++) {
... same code
}
}
这将导致更多代码,但对j
进行的测试却只有一半。但是请注意,如果N
是常量,则编译器可能会更有效地展开原始内部循环。仔细进行基准测试是确定此解决方案是否值得您解决问题,编译器和体系结构的唯一方法。
为完整起见,此代码可以简化为:
for (i = 0; i < N; i++) {
for (j = 0; j < i; j++) {
... some code
}
/* here we have j == i, skip this one */
while (++j < N) {
... same code
}
}