为什么人们不在for循环中使用(int i = length(); i> -1; i--)而不是创建新的长度整数?

时间:2012-10-16 20:32:31

标签: arrays loops for-loop

在我学习编程的所有教程和书籍中,迭代数组的练习一直都是使用for循环:

int len = array.length();
for(int i = 0; i < len; i++) {//loop code here}

人们有没有使用

的原因
for(int i = length(); i > -1; i--) {//loop code here}

从我看到的代码更短,更容易阅读,并没有创建不必要的变量。我可以看到在某些情况下可能需要在0到end之间迭代遍历数组,但在大多数情况下,方向没有区别。

4 个答案:

答案 0 :(得分:10)

  在大多数情况下,

方向没有区别

是的,在很多情况下,假设没有例外,你最终会得到相同的结果。

但是就考虑代码的作用而言,从头到尾思考它通常会更简单很多。这就是我们在余生中所做的一切

哦,你的代码中有一个错误 - 你几乎肯定不希望length()作为初始值 - 你可能想要array.length() - 1,否则它开始是一个无效的索引进入数组(这只是在将length()修复为array.length()之后)。你 这个错误的事实证明了我的观点:你的代码比你不喜欢的代码更难以推理。

让代码更容易阅读和理解很多很多在几乎所有情况下都比一个额外变量的微小的,几乎总是无关紧要的代码更重要。 (你没有指定语言,但在很多情况下我自己的代码中我只是在每次迭代时都调用array.length(),然后让优化对它进行排序。)

答案 1 :(得分:3)

原因是可读性。从0到最大的枚举对我们大多数人来说都是最有意义的,因此它是大多数开发人员的默认选择,除非算法明确需要反向迭代。

声明一个额外的整数变量在当今所有常见的编程平台中几乎没有任何成本。

答案 2 :(得分:1)

取决于您使用的平台。例如,在Java中,编译器优化非常好,如果没有任何明显的区别,我也不会感到惊讶。我曾经对各种不同的技巧进行基准测试,看看哪些更快,什么不是。经验法则是,如果你没有强有力的证据表明你在浪费资源,那就不要试图超越Java。

答案 3 :(得分:0)

第一个原因是你如何看待它。一般来说,作为人类,我们会从开始到结束迭代,而不是相反。

第二个原因是这种语法源于像C这样的语言。在这些语言中,在某些情况下从最终到开始是完全不可能的,最明显的例子是字符串(char*),你通常会得到起始地址,你必须通过枚举来计算它的长度,直到找到0