C++ 谁能解释一下这个c++;给我的?
我从一本书中看到了这段代码,这本书讨论了快速联合算法。然而,我不太明白这两个for循环是如何工作的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){
#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循环在所有bcid={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];