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

时间:2017-06-09 16:04:46

标签: c++ performance embedded

我读取/写入的大多数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;
     }
  }
}

版本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;
     }
  }
}

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

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

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

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

  2. 除了第二个版本看起来更简单,因为您不必考虑&#39; + 1&#39;。

  3. 我不知道的事情

    1)有没有性能差异?

    2)哪个版本更好?

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

    4)我担心太多了吗?

2 个答案:

答案 0 :(得分:10)

1)否

2)都没有

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

4)是的。

答案 1 :(得分:4)

C ++中所有表单的数组都是从零开始的。即它们的索引从零开始并上升到数组减去一个的大小。例如,包含五个元素的数组将具有索引04(包括)。

是C ++中大多数循环从零开始的原因。

至于您的具体问题列表,对于 1 可能是性能差异。如果在1处启动循环,那么如果将该值用作数组索引,则可能需要在每个迭代器中减去1。或者,如果增加数组的大小,则使用更多内存。

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

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

4 ,也许有点。 ;)