【问题标题】:Why don't people use (int i = length(); i > -1; i--) in for loops instead of creating a new length integer?为什么人们不在 for 循环中使用 (int i = length(); i > -1; i--) 而不是创建一个新的长度整数?
【发布时间】:2012-10-16 20:32:31
【问题描述】:

在我学习编程时阅读的所有教程和书籍中,遍历数组的做法一直是使用 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 遍历数组,但在大多数情况下方向并没有影响。

【问题讨论】:

  • length() 那到底是什么?他的父母在哪里?!?打电话给逃学官员!
  • 我猜他的意思是array.length()
  • 简而言之 - 因为一般来说它不再重要了。

标签: arrays loops for-loop


【解决方案1】:

在大多数情况下方向没有影响

没错,在许多情况下,假设没有任何异常,您最终会得到相同的结果。

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      取决于您使用的平台。例如,在 Java 中,编译器优化非常好,如果它没有产生任何明显的差异,我不会感到惊讶。我曾经对各种不同的技巧进行基准测试,以了解哪些真正更快,哪些不是。经验法则是,如果您没有强有力的证据表明您正在浪费资源,请不要试图智取 Java。

      【讨论】:

        【解决方案4】:

        第一个原因是你的想法。一般来说,作为人类,我们会从头到尾进行迭代,而不是反过来。

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

        【讨论】:

          猜你喜欢
          • 2011-05-21
          • 1970-01-01
          • 2014-08-09
          • 1970-01-01
          • 2016-10-16
          • 1970-01-01
          • 1970-01-01
          • 2019-06-25
          • 2017-05-17
          相关资源
          最近更新 更多