Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 谁能解释一下这个c++;给我的?_C++_For Loop - Fatal编程技术网

C++ 谁能解释一下这个c++;给我的?

C++ 谁能解释一下这个c++;给我的?,c++,for-loop,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){

我从一本书中看到了这段代码,这本书讨论了快速联合算法。然而,我不太明白这两个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;
    }
}
#包括
使用名称空间std;
常数int N=10;
// 
int main()
{
inti,j,p,q,id[N];
对于(i=0;i>p>>q){
//这两个for循环是如何工作的?
对于(i=p;i!=id[i];i=id[i]);
对于(j=q;j!=id[j];j=id[j]);
如果(i==j)继续;
id[i]=j;
库特
语句1在循环(代码块)开始之前执行

语句2定义了运行循环的条件(代码块)

每次循环(代码块)执行后,都会执行语句3

例如,您的(语句1)可以设置一个变量,(语句2)是您的条件,(语句3)是在函数中循环然后执行
操作时发生的情况

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]
。与另一个循环相同,只是这次使用了其他变量

有人能解释一下这个循环的C++吗?< /P> 我想,C++中的A是显而易见的。唯一令人困惑的是这两个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)

>(CIN > P>Q)是C++中从IOFROW输入的常用方法。
返回对istream的引用和
cin>>p>>q
的结果为cin。当cin(或任何其他istream)时在布尔上下文中使用,用于检查以前的输入操作是否有错误。

我怀疑您在从任何一本书中复制它时键入了什么。@PhilM How?刚刚编译并运行了代码,它工作正常。@SSD逻辑看起来是错误的。请尝试在调试器中单步执行。您会注意到,在while循环的第一次迭代中ner for循环在所有bc
id={0,1,2,3,4,5,6,7,8,9}上都不迭代
。然而,在那之后,
id
可能发生了变化,这意味着内部for循环实际上可能会迭代。啊,我明白了。这段视频帮助我更好地理解了wtf的运行情况,而不是单步执行代码,呵呵。因此在这种情况下,p首先被签名到I。如果I不等于id[I],那么id[I]是签名给我的吗?我理解正确吗?@SSD是的。但是因为
id
是初始化的,所以每个元素都等于它的索引,这些元素保证不会在while循环的第一次迭代中迭代。看看我所做的编辑,我现在让你更清楚了。例如。那么为什么你需要一个答案呢?就像你看起来那样已经知道了吗?@kingload是的,我确实知道for循环通常是如何工作的,例如
for(inti=0;I<10;I++)
。但是,在这种情况下,正如克雷格·杨所说,这对我来说毫无意义。我开始怀疑自己
i = p;
while (i != id[i])
    i = id[i];