有人可以解释使用for和if的语法吗?
int min_dist = huge;
int v = -1;
for (int i = 0; i < N; ++i) if (!done[i]) {
if (d[i] >= min_dist) continue;
min_dist = d[i];
v = i;
}
答案 0 :(得分:8)
不是并排的。它是if
内的for
。 for
的语法是
for(...)
statement
恰好,if
也是一种陈述。所以你的代码等同于:
for(...)
if() {
}
因为编译过程几乎忽略了空格。是否有新线路并不重要。这仍然是一个声明。就像单线
一样无关紧要if (d[i] >= min_dist) continue;
如果我们不省略那些明显重要的括号:
for(...) {
if() {
}
}
将来我们不太可能感到困惑。
答案 1 :(得分:3)
这是一个包含不良缩进和有组织的代码的情况。它相当于:
for (int i = 0; i < N; ++i)
{
if (!done[i])
{
if (d[i] >= min_dist) continue;
min_dist = d[i];
v = i;
}
}
在{}
行后添加块for
,便于阅读。
您可以为第二个if
语句添加另一个块,以使其更容易。
for (int i = 0; i < N; ++i)
{
if (!done[i])
{
if (d[i] >= min_dist)
{
continue;
}
min_dist = d[i];
v = i;
}
}
您可以将其简化为:
for (int i = 0; i < N; ++i)
{
if (!done[i])
{
if (d[i] < min_dist)
{
min_dist = d[i];
v = i;
}
}
}
可以将两个if
组合起来,使其更简单。
for (int i = 0; i < N; ++i)
{
if (!done[i] && d[i] < min_dist)
{
min_dist = d[i];
v = i;
}
}
答案 2 :(得分:2)
这完全相同:
int min_dist = huge;
int v = -1;
for (int i = 0; i < N; ++i){
if (!done[i]) {
if (d[i] >= min_dist) continue;
min_dist = d[i];
v = i;
}
}
作为解释,当你在for或if中只有一个声明时,你不需要括号。
答案 3 :(得分:2)
布局可能会欺骗你。它只是一个带有单个if语句的for循环:
答案 4 :(得分:1)
我总是在查看代码时发现我不明白最好的方法是以我觉得更容易阅读的格式重写它,在这种情况下:
for (int i = 0; i < N; ++i) {
if (!done[i]) {
if (d[i] >= min_dist) {
continue;
}
min_dist = d[i];
v = i;
}
}
if
语句在循环旁边的事实仅仅意味着这是要作为循环体解析的表达式(注意这总是如此,块{}
也被使用)。这个if
也有一个正文,通过明确地放入省略的块,可以更容易地看到发生了什么。
答案 5 :(得分:0)
如果您打算不带括号的循环,它可以用于执行单个语句块。在这种情况下,if
语句将一对括号中的所有其他语句分组,使它们成为一个块。
答案 6 :(得分:0)
编写此代码的正确方法是这样的:
for (int i 0; i < N; ++i)
if (!done[i] && d[i] < min_dist) {
min_dist = d[i];
v = i;
}
将if
放在与for
相同的行上会让人感到困惑。因为有两个if
语句而不是一个。