哪个更好“for(int i = 0; i!= 5; ++ i)”或“for(int i = 0; i< = 5; i ++)”?

时间:2011-01-19 09:58:57

标签: c++ c performance for-loop

哪个更好for(int i = 0; i != 5; ++i)for(int i = 0; i <= 5; i++)

如果可能,请解释理由。

我在某地读过!=运算符比比较运算符更好。预增量运算符也优于后增量运算符,因为它不需要任何临时变量来存储中间值。

有没有比这两种更好的for循环形式?

p.s:我使用前一个来源,其中一个来源,我现在不记得了。

7 个答案:

答案 0 :(得分:11)

至少存在两个不同之处:

  • 第一个将迭代5次(从0到4),而第二个将迭代6次(从0到5)。

    这是一个逻辑差异,它取决于你需要做什么。

    如果您对第二个示例的意思是i<=4(而不是i!=5),您不应该打扰:即使关闭了优化,任何编译器都将始终能够优化这样一个简单的表达式。 / p>

  • 第二个区别是使用运算符++:在使用前缀版本的情况下,而在另一个版本中使用后缀版本。

    这对本机类型没有区别,但可以对用户定义的类型(即类,结构,枚举,...)做一些改动,因为用户可以重载运算符,并且后缀为({{ 1}})有时可能会慢一些。

答案 1 :(得分:2)

使用“i&lt; 5”将是大多数人希望在基于常见用法的for循环中看到的形式。 “i!= 5”或“i&lt; = 5”当然没有错(期望它们会给出不同的循环计数)但如果我看到这些形式中的任何一种,我必须停下来思考,因为它不是最多的共同形式。

所以我总是写“i&lt; 5”,除非有充分理由不这样做

答案 2 :(得分:2)

一般来说,你应该为PEOPLE而不是电脑写。

“for(i = 0; i&lt; 5; i ++)”表格清楚地表明有效范围是“0到4”而没有别的。

正如其他人所说,这种形式确保循环中有趣的代码不太可能导致无限循环。正如其他人所说,使用反映你的意思的形式。

请注意,“小于”是c中常用的习语(这意味着更多的程序员会期望)。这是另一个更喜欢“for(i = 0; i&lt; 5; i ++)”形式的原因。

答案 3 :(得分:1)

我的C ++语言老师告诉我使用规范形式:for(int x=0; x != 5; ++i)

你的另一个工作正常,但假设你想在迭代器上使用循环。然后&lt; =不必正确定义,postfix inc可能会让你的程序花费很多时间来复制对象。

所以他让我们使用表格

for(int i=begin; x != end; ++i)for(int i=begin; end != i--; )

答案 4 :(得分:1)

哪个更好(int i = 0; i!= 5; ++ i)或者(int i = 0; i&lt; = 5; i ++)?

第二个,因为它是一个Bolian算子,然后这个(int i = _ ; i&lt; = __或等等; i ++增量)? - &GT;它甚至在编程初学者时也被广泛使用。

答案 5 :(得分:0)

您应该使用<<=!=等最佳表达您的应用程序逻辑,但如果没有理由更喜欢任何特定的样式,那么请保持一致。在通知该决定时,<!=运算符的优势在于允许基于0的索引与sizeof或STL样式size / length之间进行比较值,如:

for (size_t i = 0; i < my_vector.size(); ++i)
    ...

<<=运算符有时会防止超过终止值(如果你在循环内有另一个条件,你可以在其中增加/添加i,或者有一些浮点舍入/表示差异)。实际上并不常见,但偶尔保存错误总比没有好。

鉴于'&lt;'是这两套的交集,它是一个受欢迎的选择。在我看来,<还传达了循环运行的状态......一个更积极的断言,而不是!=样式。一般来说,编程中不鼓励使用否定断言(例如,bool invalidbool valid更可靠,尤其是在复杂的布尔表达式和引入双阴影时。“

这当然是数字类型。其他类型可能暗示其他样式...例如,使用!= sentinel。我更喜欢选择操作员帮助来记录这种类型的使用含义,尽管这是个人选择并且可以说是多余的。

否则,对于复杂类型而言,preincrement可能比post更有效,因为它避免了临时性。

答案 6 :(得分:0)

条件!=比<和(甚至更多)<=都快,否则,这只是味觉的问题,尽管需要注意可能的无限循环。