循环遍历数组时,有没有办法避免在每个循环上进行比较?

时间:2014-11-18 22:22:54

标签: c++ loops for-loop while-loop iteration

假设一个循环总是通过某个序列一次迭代一个循环,我想知道是否有一些聪明的循环结构或技巧,避免在每次迭代时检查数组的结尾

for (int i=0; i<length; i++) { 
    //something 
}

int i=0;
while (i<length) { 
    //something 
    i++;
}

为了澄清,我指的是上述例子(i<length)中的比较。

如果相关,我通常用C ++编写代码,但我很乐意听到其他提供解决方法的语言。

3 个答案:

答案 0 :(得分:2)

是的,您可以像这样展开循环:

int i;
for (i = 0; i < length - 3; i += 4) { // 4x unrolled loop
    //something(i)
    //something(i+1)
    //something(i+2)
    //something(i+3)
}
for ( ; i < length; i++) {           // clean up loop for residual 0..3 iterations
    //something(i)
}

答案 1 :(得分:1)

您可以展开循环:

int length = 20 ;
int i=0;
while (i+3<length) { 
    //something 
    i++;
    //something 
    i++;
    //something 
    i++;
    //something 
    i++;
}

//handle any remaining cases
while (i<length) { 
    //something 
    i++ ;
}

答案 2 :(得分:0)

  

我想知道是否有一些聪明的循环结构或技巧可以避免在每次迭代时检查数组的结尾。

将i设置为长度,然后在循环的每次迭代中递减i。

int i = length;
while ( i-- >= 0) {
  // do something
}