我读取/写入的大多数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开始会更好。
为什么第二版在我看来更好:
如果函数中的数组从0开始是公平的 会很好,因为数组的索引从零开始。但在 这部分代码没有使用数组。
除了第二个版本看起来更简单,因为您不必考虑&#39; + 1&#39;。
我不知道的事情
1)有没有性能差异?
2)哪个版本更好?
3)在决定起点时是否还应考虑其他方面?
4)我担心太多了吗?
答案 0 :(得分:10)
1)否
2)都没有
3)C和C ++中的数组是从零开始的。
4)是的。
答案 1 :(得分:4)
C ++中所有表单的数组都是从零开始的。即它们的索引从零开始并上升到数组减去一个的大小。例如,包含五个元素的数组将具有索引0
到4
(包括)。
那是C ++中大多数循环从零开始的原因。
至于您的具体问题列表,对于 1 ,可能是性能差异。如果在1
处启动循环,那么如果将该值用作数组索引,则可能需要在每个迭代器中减去1
。或者,如果增加数组的大小,则使用更多内存。
对于 2 ,它实际上取决于你重复的内容。它是否超过数组索引,那么从零开始的循环显然更好。但是您可能需要在任何值处开始循环,这实际上取决于您正在做什么以及您尝试解决的问题。
对于 3 ,您需要考虑的是使用循环。
4 ,也许有点。 ;)