增量声明的目的是什么?

时间:2015-12-24 21:50:14

标签: c++ loops for-loop while-loop increment

为什么增量语句在C ++中的for循环中是一个东西?对我而言似乎是多余的,因为你可以简单地将增量放在条件代码中。我在这里误解了一些重要的事情吗?

为了更好地说明我的问题,我包括一些伪代码: 有什么区别 - >

for( int a = 10; a < 20; a = a + 1 )
{
    cout << a << endl;
}

for( int a = 10; a < 20;)
{
    a = a + 1
    cout << a << endl;
}

5 个答案:

答案 0 :(得分:8)

它有时不仅仅是方便。

这些是等价的:

for (int a = 10; a < 20;  a = a + 1) {
    cout << a << endl;
}

for (int a = 10; a < 20;  ) {
    cout << a << endl;
    a = a + 1;
}

但是,这些不是

// this works ...
for (int a = 10; a < 20;  a = a + 1) {
    if (blah ...)
        continue;
    cout << a << endl;
}

// this doesn't
for (int a = 10; a < 20;  ) {
    if (blah ...)
        continue;
    cout << a << endl;
    a = a + 1;
}

由于您来自python,惯用 for循环就像一个python range,但功能更强大。用Cthon表示的C for循环将是:

for a in range(10,20,1)

将此表达为:

更为惯用
for (a = 10;  a < 20;  a += 1)

因为循环增量为1,所以它甚至可以更多惯用语:

for (a = 10;  a < 20;  ++a)

但是,for循环是:

for ([init_stmt];  [test_stmt];  [incr_stmt])

任何* _stmt可以是复合:

for (x = 0, y = 0;  x < 10;  ++x, y += 2)

答案 1 :(得分:4)

便利。

但是,您的等效代码应为:

for (int a = 10; a < 20;)
{
    cout << a << endl;
    a = a + 1;
}

它在循环体的末尾运行。

答案 2 :(得分:3)

[对于现在删除/编辑的答案的质量抱怨抱怨;-)]

此:

for (unsigned counter = 1; counter <= 10; ++counter) {
    doStuff();
}

基本等同于此:

unsigned counter = 1;
while (counter <= 10) {
    doStuff();
    ++counter;
}

有一个值得注意的例外,在第一种情况下,counter仅限于for块内,并且一旦完成就自动超出范围,您将获得相当大的好处 - 对于后者,counter必须在循环后保持在范围内,它可能是无用的,甚至是障碍。

(切向:注意C不支持 - for声明,或任何非顶级声明,直到C99 - 但除非情有可原,否则任何人现在至少不使用C99一个可疑的选择imho。)

编辑:克雷格也对continue提出了一个非常好的观点 - 这是一个经常被遗忘但肯定有用的陈述。我确信我们可能会想到其他差异。

答案 3 :(得分:1)

这个例子:

using namespace std;
int main(int argc, char** argv) {
    for( int a = 10; a < 20;)
       {
        a = a + 1;
        cout << a << endl;
   }


    return 0;
}

输出将是11 - > 20

第一个例子是10 - > 19

你正在将增量部分放在循环之外,这可能,但请注意,值10不会出现,因为你在打印a值之前增加 所以在第二个例子中你打印了值然后递增,并且在循环结束时,你退出循环而没有达到20,因为条件让你退出循环

for loop process

在递增之前执行代码块是您的关键,在执行代码块之后的for循环递增

答案 4 :(得分:0)

嗯,这不是必需的,只是为了方便。 在你的第二个代码中,你犯了一个小错误,这会使代码与第一个代码不同。

您的增量应该在循环的末尾,以便等同于第一个代码 所以它应该是:

for( int a = 10; a < 20;)
{
cout << a << endl;
a = a + 1; //increment at the end of instructions
}

这些小错误以及忘记包含增量的错误是为什么在for循环中包含增量是方便的。

或者您可以使用while循环:

while (condition)
{//instructions here;}