小编Owe*_*wen的帖子

循环不变量(特别是"Accelerated C++"的第3章)

我目前正在通过"Accelerated C++"工作,并在第3章中遇到了这个问题:

// invariant:
//  we have read count grades so far, and
//  sum is the sum of the first count grades
while (cin >> x) {
    ++count;
   sum  +=  x;
}
Run Code Online (Sandbox Code Playgroud)

作者通过解释不变量需要特别注意它来遵循这一点,因为当读入输入时x,我们将读取count + 1等级,因此不变量将是不真实的.同样,当我们增加计数器时,sum将不再是最后计数等级的总和(如果您没有猜到,这是计算学生分数的传统程序).

我不明白为什么这很重要.当然对于任何其他循环,类似的陈述是真的吗?例如,这是本书的第一个while循环(输出稍后填写):

// invariant: we have written r rows so far
while (r != rows) {
    // write a row of output 
    std::cout << std::endl;
    ++r;
}
Run Code Online (Sandbox Code Playgroud)

一旦我们编写了适当的输出行,那么在我们增加之前,不变量肯定是假的r,就像在另一个例子中一样吗?

是什么让这两个条件不同?

编辑:谢谢你的所有回复. 我想我已经得到了它,但是在我选择一个"接受的答案"之前我还要再花一点时间才能确定. 到目前为止,所有回复基本上都是一致的,所以看起来不太公平,但我觉得值得做.

原始段落,如下所述:

"理解这个循环的不变量需要特别小心,因为while中的条件有副作用.这些副作用会影响不变量的真实性:成功执行cin >> …

c++ invariants

6
推荐指数
1
解决办法
1326
查看次数

标签 统计

c++ ×1

invariants ×1