for 循环后的分号是什么意思?为什么第一个循环语句中有 j++
What does a semicolon after for-loop means? Why is there a j++ in first loop statement?
我需要基于优先级队列实现我自己的Dijkstra算法版本,在搜索一些网站时,我看到了一种实际上有效的算法,但具有奇怪的for循环语句:
int i,j,n;
cin >> n; //number of vertexes
bool *QS = new bool [n];
//whole QS is set to false here
for(i = 0; i < n; i++) {
for(j = 0; QS[j]; j++);
for(u = j++; j < n; j++)
if(!QS[j] && (d[j] < d[u])) //d[i] is table of distances
u = j;
QS[u] = true;
//some code
}
我知道 ;
after 循环意味着它是空语句,但是如果我在第二个for-loop
发表评论,该程序就会停止工作,所以它实际上意味着什么。我相信这个u = j++
应该是像u = j+1
开始形式,但我不太确定。
for(j = 0; QS[j]; j++);
用作j=0; while(QS[j])j++;
即找到QS[j]
为假的第一个 j
for(j = 0; QS[j]; j++);
将 j
设置为 0,然后递增j
直到QS
中的第一个元素为 false。 然后,将该值用于第三个循环的初始值。
这是一种切肉刀的编写方式,但您可以使用std::find
和std::distance
来更清楚地表达它正在做什么
for(i = 0; i < n; i++) {
int j = std::distance(std::begin(QS), std::find(std::begin(QS), std::end(QS), false));
for(u = j++; j < n; j++)
if(!QS[j] && (d[j] < d[u])) //d[i] is table of distances
u = j;
QS[u] = true;
//some code
}
它明确指出j
将是数组开头到第一个 false 元素的距离。
第二个 for 循环遍历所有数组 QS,这是一个布尔值数组。 当 1 为 false 时,这将中断,保存 j 的当前值并使用该值 +1 开始下一个循环。
相关文章:
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 如何仅读取文本文件中的第一个值
- 在C++中,如何在第一个"system()"结束后执行第二个"system()"?
- 输入 ctrl + x 后如何再次 cin (cin<<x) 循环(cin 一个结构)
- 查找不在标准中的第一个值::设置<int>最小-最大值
- C++:忽略第一个 cin.ignore 之后的输入
- 在C++中打印多个矢量的第一个值
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- C++第一个cout将不会打印
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- OpenGL:第二个VBO破坏了第一个VBO
- 为什么第一个Dynamic_cast没有投射到基类?
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- C++ 为什么程序只读取第一个值
- 双倍简单的循环与一个复杂的循环
- 循环数组 - 从最后一个跳到第一个,反之亦然
- For循环不显示数组中最低的,而是第一个
- 为什么我的代码在第一个for循环后停止运行?
- 如果此代码中的答案为"N",我该如何转到第一个 while 循环: