与计数器一样使用

Jav*_*i V 1 c++ for-loop while-loop

大多数情况下,while循环用于检查while循环体中发生的事件.并且主要用于给出"确定的"迭代次数.我们假设我们需要知道我们所处的迭代次数,一般来说:

一般While循环:

bool flag = false;
int it = 0;
while (!flag)
{ 
    //... do something using it
    ++it;
    flag = getFlag();
}
Run Code Online (Sandbox Code Playgroud)

一般For循环,迭代次数是循环的固有:

for(int it = 0; it < N; ++it)
{
    //... do something using it
    if (getFlag())
        break;
}
Run Code Online (Sandbox Code Playgroud)

但是,对于没有设置迭代次数的情况(也就是说,我们循环直到偶数发生)我从未见过如下情况:

for(int it = 0; !getFlag(); ++it)
{
    //...do something using it
}
Run Code Online (Sandbox Code Playgroud)

但我总是看到像我写的第一个while循环.有什么真正的区别吗?在while循环中它被认为是更好的风格吗?因为对我来说,for循环更紧凑,易于阅读和遵循.

cdh*_*wie 6

一般来说,你应该使用你认为最具可读性的那些,但要注意这两种结构之间存在差异,可能会让你措手不及:行为continue.

continue不会it使用while构造增加,但它会使用for构造增加它.

while (!getFlag()) {
    // ...

    if (something) {
        // "it" won't be incremented!
        continue;
    }

    // ...

    ++it;
}

for(int it = 0; !getFlag(); ++it) {
    // ...

    if (something) {
        // "it" will be incremented!
        continue;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

如果您没有使用,continue那么行为将是相同的,但除非您添加不包含语句的限制,否则您不能使一般语句for (a; b; c) { d; }完全等效.{ a; while (b) { d; c; } }dcontinue