对于vs同时查找链接列表中的最后一项

gra*_*olf 2 c++ for-loop while-loop c++11

我应该使用for或while循环来查找链表中的最后一项吗?

Item * last = list;
for (; last->next; last = last->next) ;
Run Code Online (Sandbox Code Playgroud)

Item * last = list;
while (last->next)
{
    last = last->next;
}
Run Code Online (Sandbox Code Playgroud)

它是2行而不是5行,看起来几乎同样可读.为什么我总是只看到while形式?

das*_*ght 5

为什么我总是只看到while形式?

while表单首选有两个原因:

  • 具有空体的循环不像其身体中至少有一个语句的循环那样可读 - C语言的程序员在for循环混乱后找到分号,或者甚至完全错过分号,而不理解正在发生的事情.关于while循环没有这样的混乱.
  • for在循环外部声明的循环变量的循环提供了一个强烈的指示,表明您实际上需要一个while循环 - 循环变量的作用域是循环体.当你在循环之外声明它们时,这是因为你想要循环结果中循环变量的结束值.