何时在while循环中使用for循环?

时间:2011-01-09 17:36:03

标签: c++ c

我们可以为同一目的使用for循环和while循环。 如果我使用而不是在什么时候它们会影响我们的代码呢?在if-else和switch-case之间出现了同样的问题?如何决定使用什么? 例如,你更喜欢哪一个?

此代码:

int main()
{
   int n = 10;

   for(int i=0;i<n;i++)
    {
        do_something();
    }
    return 0;
}

或者这段代码:

int main()
{
    int n=10,i=0;

    while(i<n)
    {
          do_something();
          i++;
    }
    return 0;
}

如果使用for或while循环不会以任何方式影响代码那么我可能知道需要为同样的问题制作2个解决方案吗?

8 个答案:

答案 0 :(得分:13)

使用任何一个使您的代码意图最清晰的。

答案 1 :(得分:10)

如果你知道循环应该事先运行的迭代次数,我会推荐for构造。虽然循环适用于循环的终止条件发生在某个尚未确定的时间。

答案 2 :(得分:4)

我尝试更喜欢for循环。为什么?因为当我看到for循环时,我可以预期所有循环bookeeping都保存在一个语句中。我可以插入breakcontinue语句,而不必担心破坏循环的运行方式。最重要的是,循环体侧重于你实际想要循环所做的事情,而不是维护循环本身。如果我看到while,那么在我理解循环使用的迭代模式之前,我必须先查看并理解整个循环体。

我最终使用while的唯一地方是那些少数情况,其中循环的控制由一些外部例程提供(即FindFirstFileW

但这完全是个人意见的问题。很多人不喜欢我最终使用for循环所做的事情,因为循环语句经常会跨越多行。

答案 3 :(得分:2)

通常,for循环可能更适用于简单循环,因为循环的逻辑包含在一行中:

for (int i = 0; i < 10; ++i) {...}

然而,有时我们需要更复杂的逻辑或流量控制。 while循环允许我们实现更复杂的循环。例如,假设我们只想在某些条件下递增计数器变量:

int i = 0;
while (i < 10)
{
  if (some_condition) ++i;
  else if (some_other_condition) { ... }
  else break;
}

答案 4 :(得分:1)

你不能写while(int i=0, i < n);也就是说,您必须在i循环之前定义while;意味着i存在于循环内外。

但是,如果是for循环,您可以在i循环本身中定义for;所以i在循环外不存在。这是一个区别。正因为这种差异,我比for更喜欢while。当while使事情变得更加麻烦时,很少使用for

答案 5 :(得分:1)

只需使用使代码可读且符合逻辑的那个。

在某些情况下,编译器(至少是gcc)能够比执行相同操作的for循环优化得更好。如果我没记错,优化只有几个时钟周期,所以它可能永远不会对性能产生任何明显的影响。

答案 6 :(得分:1)

有一些非常微妙的差异......

  • 循环变量的范围,例如,for循环i具有局部范围,其中while必须先定义(这意味着它可用)之后,当然你可以用for来完成..)
  • continue,带有for循环,变量将递增/递减,使用while,您必须在continue

坦率地说,如果你需要增加/减少,for循环是有意义的,如果你不知道边界,并且没有真正的增量/减量,while循环会产生更多感觉,例如

while(some_stream >> input)
{
  // do stuff...
}

答案 7 :(得分:0)

它们决不会影响您的程序!这是易于理解的问题。

switch(i)     // Once finding your case, you can easily know where the switch ends
              // and thus the next statement of execution
{
    case 1: break ;
    case 2: break ;
    // .....
    case 10: break ;
    default:break ;
}

if( i==1 )   // Here you have the pain of finding where the last else if ends !
{}
else if( i==2)
{}
// ...
else if( i==10)
{}

然而,这是一个品味问题。我更喜欢switch