【问题标题】:For Loop or While Loop - EfficiencyFor 循环或 While 循环 - 效率
【发布时间】:2010-11-18 18:21:40
【问题描述】:

这可能是一个愚蠢的问题,但是 while 循环的效率与 for 循环的效率相比如何?我一直被教导如果你可以使用 for 循环,那么我应该这样做。但实际上有什么区别:

$i = 0;
while($i < 100) {
     echo $i;
     $i++;
} 

比较:

for($i = 0; $i < 100; $i++) {
    echo $i;
}

我知道在这些具体的例子中,差异就像 .000000001%,但是当我们谈论大型复杂循环时,有什么区别?

【问题讨论】:

  • 您应该添加一个标签,说明这是什么语言。它看起来像 C,但“回声”告诉了其他东西。
  • 代码是用 PHP 编写的(但我忘记了变量之前的 $ .. 很匆忙 :P),但这个问题是针对一般编程的。但是,从下面的答案中可以看出没有确切的区别。

标签: loops performance


【解决方案1】:

我认为你从得到的建议中得出了错误的结论。

选择for 结构而不是while 的原因(至少在这种情况下)与效率无关;这一切都是关于编写以清晰易懂的方式表达您的意图的代码。

for 将初始条件、增量和退出条件放在一个位置,使其更易于理解。 while 循环将它们分散开来。例如,在您的样本中,i 的初始值是多少? -哦,你忘了指定吗? ——这就是重点。

【讨论】:

  • +1;我认为您最简洁地总结了所有回复;你应该已经得到了“答案”。
【解决方案2】:

这取决于您使用的确切编译器。在您的示例中,一个好的编译器将为这两个选项创建相同的机器代码。

【讨论】:

    【解决方案3】:

    您可以从这些答案中的大部分猜到,for 循环优于 while 循环的主要优点是可读性。 for 循环更简洁,更美观。使用while循环陷入无限循环也容易得多。我会说我同意你的教导,如果你可以使用 for 循环,你应该这样做,所以只要你坚持下去,你的编程体验会更加愉快。

    【讨论】:

      【解决方案4】:

      for loopwhile loop 之间的性能差异不是大问题,因为现代编译器可以为两个循环生成相同的机器代码,其次两个循环需要相同的操作:

      1. 计数器变量的初始化。
      2. 测试条件。
      3. 计数器变量的增量/减量。

      一般来说,您应该在代码中使用for loop,原因如下:

      1. 提高代码的可读性。
      2. 为了提高代码的可维护性,因为循环的所有三个主要部分,即初始化、递增/递减和测试条件都写在同一行(在大多数情况下)。
      3. 它比while loop 更好地限制了计数器变量的范围,因此它有助于更​​好地管理内存。

      我希望这是有道理的并且会有所帮助。

      【讨论】:

        【解决方案5】:

        这将稍微取决于语言,可能,也可能取决于编译器,但大多数现代编译器会将它们视为完全相同,不会有任何区别。

        【讨论】:

          【解决方案6】:

          将主要区别视为样式:使用for 循环,您不必去寻找初始值、阈值和增量。

          while 中创建无限循环也容易得多,因为您忘记了递增。

          【讨论】:

            【解决方案7】:

            好吧,如果循环又大又复杂,那也没关系,因为循环代码的开销 (for or while) 会非常低...

            无论如何,如果你真的想知道,我想这取决于你检查你的 ide, 在汇编代码中。或者您可以使用反编译器在可执行文件中查看自己。 http://www.caesum.com/files/borg228.zip (警告:.exe 中通常有很多膨胀,所以祝你好运!)

            【讨论】:

            • 测量它。即使是汇编代码也不会告诉你处理器实际上做了什么......
            【解决方案8】:

            正如这里所有答案中提到的,任何体面的编译器都会将两个循环编译成相同的机器代码。

            在这两种情况下,您的机器代码(以 MIPS 为例)将是一堆普通的汇编语句,后跟一个分支(onequal/notequal),从而使您的效率保持一致。

            但是,您可以在这里讨论编码风格问题(不是效率)。

            For 循环:

            1. 当您确切知道循环将运行多少次时使用。退出案例是已知的。
            2. 了解循环在每次迭代中的增量

            *可能的用法:当一个项目集合已经存在并且您想要查看它并检索某个属性出现的次数。

            While 循环:

            1. 您不知道循环将运行多少次。有一个退出案例,在循环运行时设置/到达(如果你想模拟一个 for 循环,你会使用类似计数器的东西(额外代码))

            2. 不知道您的循环将增加多少。您的增量/下一步可以动态设置。虽然您可以在 for 循环中执行此操作,但您必须考虑每次迭代的增量以及导致一些不可读的代码,如果您使用 while 循环可以避免这些代码。

            *可能的用法:为某些数据创建流。您不知道流有多长,因此您的退出案例是流结束的时间。由于它是一个流,并且您可能逐行获取数据,因此您可能希望完全跳过白线,从而使增量不一致。

            【讨论】:

              猜你喜欢
              • 2014-09-02
              • 2014-08-21
              • 2021-07-27
              • 1970-01-01
              • 1970-01-01
              • 2016-04-15
              • 2019-06-03
              • 1970-01-01
              • 2019-11-10
              相关资源
              最近更新 更多