哪个更好for(int i = 0; i != 5; ++i)
或for(int i = 0; i <= 5; i++)
?
如果可能,请解释理由。
我在某地读过!=运算符比比较运算符更好。预增量运算符也优于后增量运算符,因为它不需要任何临时变量来存储中间值。
有没有比这两种更好的for循环形式?
p.s:我使用前一个来源,其中一个来源,我现在不记得了。
答案 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 invalid
比bool valid
更可靠,尤其是在复杂的布尔表达式和引入双阴影时。“
这当然是数字类型。其他类型可能暗示其他样式...例如,使用!= sentinel
。我更喜欢选择操作员帮助来记录这种类型的使用含义,尽管这是个人选择并且可以说是多余的。
否则,对于复杂类型而言,preincrement可能比post更有效,因为它避免了临时性。
答案 6 :(得分:0)
条件!=比<和(甚至更多)<=都快,否则,这只是味觉的问题,尽管需要注意可能的无限循环。