内循环索引不等于外循环索引时的嵌套循环

时间:2018-12-26 14:18:02

标签: c logic nested-loops

嵌套循环逻辑在索引等于外部循环索引时跳过内部循环。

在内部循环中使用if语句来达到以下效果:

for (i=0;i<N;i++)
  for (j=0;j<N;j++)
    if (j!=i)
      ... some code

我相信这会给我带来预期的结果,但是有一种我可能不知道的CPU消耗较少的方法吗?

1 个答案:

答案 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
    }
}