任何人都可以为我解释这个c ++ for循环吗?

时间:2017-05-02 02:52:43

标签: c++ for-loop

我从一本书中看到了这个代码,它讨论了快速联合算法。但是,我不太清楚两个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;
    }
}

2 个答案:

答案 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来检查以前的输入操作是否存在错误。