循环从0或1开始?哪一个和为什么?

Ali*_*Ali 3 c++ embedded performance

我读取/写入的大多数for循环从0开始,并且公平地说,我读过的大部分代码都用于嵌入式系统,而且它们都是用C/C++编写的.在嵌入式系统中,可读性在某些情况下不如代码效率那么重要.因此,我不确定以下哪种情况会是更好的选择:

版本1

for(i = 0; i < allowedNumberOfIteration; i++)
{
//something that may take from 1 iteration to allowedNumberOfIteration before it happens
  if(somethingHappened)
  {
     if(i + 1 > maxIteration)
     {
       maxIteration = i + 1;
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

版本2

for(i = 1; i <= allowedNumberOfIteration; i++)
{
//something that may take from 1 iteration to allowedNumberOfIteration before it happens
  if(somethingHappened)
  {
     if(i > maxIteration)
     {
       maxIteration = i;
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

为什么第一版在我看来更好:

1.大多数循环从0开始.因此,也许有经验的程序员发现它从0开始会更好.

为什么第二版在我看来更好:

  1. 公平地说,如果从0开始的函数中有一个数组会很好,因为数组的索引从零开始.但是在这部分代码中没有使用数组.

  2. 除了第二个版本看起来更简单,因为你不必考虑'+1'.

我不知道的事情

1)有任何性能差异吗?

2)哪个版本更好?

3)在决定起点时是否还应考虑其他方面?

4)我担心太多了吗?

小智 12

1)没有

2)都没有

3)C和C++中的数组是从零开始的.

4)是的.


Som*_*ude 5

C++ 中所有形式的数组都是从零开始的。即它们的索引从零开始并上升到数组的大小减去一。例如五行的阵列将具有索引04(含)。

就是为什么 C++ 中的大多数循环都是从零开始的。


至于问题的具体名单,对于1可能是一个性能上的差异。如果在 at 开始循环,11如果将该值用作数组索引,则可能需要在每个迭代器中减去。或者,如果增加数组的大小,则会使用更多内存。

对于2,它实际上取决于您要迭代的内容。是否超过数组索引,那么从零开始的循环显然更好。但是您可能需要以任何值开始循环,这实际上取决于您在做什么以及您要解决的问题。

对于3,您需要考虑的是您使用循环的目的。

4,也许有点。;)