我应该使用for或while循环在链表中查找最后一个项目吗?
Item * last = list;
for (; last->next; last = last->next) ;
相对
Item * last = list;
while (last->next)
{
last = last->next;
}
它是2行而不是5行,而且可读性几乎相同。为什么我总是只看到while表单?
如果要比较行数,请至少尝试合理准确地进行比较。该for
循环的格式应更多像这样的:
Item * last = list;
for (; last->next; last = last->next)
;
这使for
循环(有意地)控制一个空语句变得更加明显。该while
循环可以写成更是这样的:
Item * last = list;
while (last->next)
last = last->next;
如果我们坚持认为即使在单个受控语句中也需要大括号,则对于每个语句,它们仍然以相同的行数结束:
Item * last = list;
for (; last->next; last = last->next) {
;
}
vs:
Item * last = list;
while (last->next) {
last = last->next;
}
因此,行数的差异完全是由于您选择使用的格式(尤其是您没有为两者使用相同甚至相似的格式)。
其他人已经指出,它们很可能会编译为相同的代码,我同意您可以(并且应该)期望对于任何合理的编译器来说都是如此。
剩下的风格和可读性是唯一的区别。在这方面,for
循环显然是优选的。显然从未从早期接触BASIC(或可能是FORTRAN)中恢复过来的一些人坚持认为,for
循环仅应用于简单计数的循环,例如BASIC和FORTRAN中支持的循环。将此限制应用于C或C ++只是错误的做法和愚蠢的做法。for
有充分的理由使C的循环变得更加通用,并且在其上施加纯粹的人为限制根本没有任何好处。
简单的经验法则:如果实际上在for
循环头中使用了三个子句中的至少两个,那么使用for
循环比使用循环更好while
。一个for
与空体循环大致类似于一个空的身体构造:它可能是陌生和困惑的人谁不知道的语言,但任何人谁真正知道的语言,它的琐碎和熟悉的手指在他们的手上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句