我从一本书中看到了这个代码,它讨论了快速联合算法。但是,我不太清楚两个for循环是如何工作的。
#include <iostream>
using namespace std;
const int N = 10;
//
int main()
{
int i,j,p,q,id[N];
for(i = 0; i < N; i++) {
id[i] = i;
}
while (cin >> p >> q){
// how does these two for loops work?
for (i = p; i != id[i]; i = id[i]);
for (j = q; j != id[j]; j = id[j]);
if (i == j) continue;
id[i] = j;
cout << " " << p << " " << q << endl;
}
}
答案 0 :(得分:4)
for (statement 1; statement 2; statement 3) {
语句1在循环(代码块)开始之前执行。
语句2定义了运行循环的条件(代码块)。
每次执行循环(代码块)后都会执行语句3。
例如,你的(语句1)可能是设置一个变量,(语句2)是你的条件,(语句3)是如果它遍历函数然后执行something
会发生的事情。
for (i = p; i != id[i]; i = id[i]);
for (j = q; j != id[j]; j = id[j]);
在您的情况下,for循环设置i
等于p
然后询问条件,只要i
不等于id [i],然后i
等于id [i]
。与其他循环相同,只是这次使用其他变量。
答案 1 :(得分:0)
任何人都可以为我解释这个c ++ for循环吗?
我猜很明显c ++中的regular for loop does是什么。唯一可能令人困惑的是这两个for循环:
for (i = p; i != id[i]; i = id[i]);
for (j = q; j != id[j]; j = id[j]);
有空体(例如,它们只有一个;
而不是一个循环体)。在这种情况下,这非常令人困惑,使用while循环会更加明显:
i = p;
while (i != id[i])
i = id[i];
第二个循环相同。
这个循环的作用可能不那么明显:while (cin >> p >> q)
while (cin >> p >> q)
是在c ++中从iostream进行输入的常用方法。
istream::operator>>返回对istream的引用,cin >> p >> q
的结果为cin。当在布尔上下文中使用cin(或任何其他istream)时,它使用operator bool来检查以前的输入操作是否存在错误。