为什么这个不变性会变成假的
Why does this invariant become false?
在阅读加速 c++ 时,我对为什么不变变为 false 的解释感到困惑(参见下面的代码):
作者(在本例中)将不变量定义为:
我们的不变性是到目前为止我们已经编写了 r 行输出。当我们定义 r 时,我们给它一个初始值 0。在这一点上,我们根本没有写任何东西。将 r 设置为 0 显然使不变为真,因此我们满足了第一个要求。
// invariant: we have written r rows so far
int r = 0;
// setting r to 0 makes the invariant true
while (r != rows) {
// we can assume that the invariant is true here
// writing a row of output makes the invariant false <- WHY?
std::cout << std::endl;
// incrementing r makes the invariant true again
++r;
}
// we can conclude that the invariant is true here
然后后来解释...
写入一行输出会导致不变量变为 false,因为 r 不再是我们写入的行数
鉴于定义,我无法在两者之间建立联系。
为什么在写入一行输出时不变量变为 false?
r
定义为已打印的行数。 因此,只有在以下情况下,不变性才为真
r == number of rows that have been printed
在打印行和递增r
以更新到目前为止打印的行数之间,该不变性是不正确的。
r
等于某个数字(例如,n
),并且"已打印的行数"比该数字(n + 1
)大一个,因为您刚刚打印了一行。 因此,不变性是不正确的,因为n != n + 1
.
到目前为止,我们已经编写了 R 行输出
r
从 0 开始,在cout
为 r 的点处仍然是 0。cout
写了 1 行,但r
是 0。因此,不变性暂时为假,因为如果您在上面的语句中插入 r
的值,则"到目前为止我们已经写出了 0 行输出"是不真实的。
递增r
会导致不变性再次变为 true。
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 而循环:简单的除法程序输出零,不明白为什么
- 不理解为什么代码没有产生所需的答案
- 我不知道为什么这段代码会让核心被转储?
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- C++复制 c'tor 现在确实会采取行动。 不清楚为什么
- 反转字符串.不知道为什么这个逻辑是错误的.C++
- 没有函数模板的实例与我不知道为什么的参数列表匹配
- 什么是非营利组织???我的问题是我不明白为什么有人会使用它
- 我正在尝试用 c++ 制作菜单,但不明白为什么它不循环
- if-else 语句仅按特定顺序工作,我不知道为什么
- DirectX 11 引擎在第三次代码改进后没有突然运行,我不知道为什么
- 我的程序不适用于 strcat - 我似乎不明白为什么?
- 我不确定为什么代码没有运行,它在编译时抛出错误,说它无法找到 PrintArray()
- 函数抛出seg错误,我不知道为什么
- 我不知道为什么复制构造函数的调用在 c++ 中不稳定
- 我不明白为什么会编译
- 随着时间的推移,我的程序越来越慢,我不知道为什么.内存泄漏
- 为什么这个不变性会变成假的