我可以在一个循环中使用 2 个循环语句吗?

Ahs*_*min 2 c c++ for-loop

这个循环语句是否正确?如果不正确那么有什么替代方法?我正在尝试像这样的 o(n) 循环语句-

for(int i=0 ; i<n  ; i++ , j=n ; j<n*2 ; j++){
    continue;
  }
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 10

你似乎想要的是:

for (int i = 0, j = n; i < n && j < n * 2; ++i, ++j)
{
    continue;
}
Run Code Online (Sandbox Code Playgroud)

为了帮助你更好地理解我做了什么,为什么,以及你将来如何做这样的转换,你需要了解for编译器是如何真正处理循环的:作为一个特殊的while循环。

例如,如果你有

for (a; b; c)
{
    d;
}
Run Code Online (Sandbox Code Playgroud)

那么这相当于:

{
    a;
    while (b)
    {
        d;
        c;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我们以while循环的形式采用您(可能)想要的东西,那么它将是

{
    int i = 0, j = n;  // a in my example above
    while (i < n && j < n * 2)  // b in my example above
    {
        continue;  // d in my example above
        ++i, ++j;  // c in my example above
    }
}
Run Code Online (Sandbox Code Playgroud)

现在很容易将其转换为for我最初展示的循环。

如评论中所述,while此处显示的循环有点误导,因为它实际上不会进行增量。但是我假设您的真实循环没有无条件continue语句作为主体中的唯一语句。那会使循环变得毫无意义。然而,这个原则仍然有效,即使这个例子不是。


Sou*_*osh 10

该构造是错误的,您不能在一个构造中包含两个循环,但是您可以有多个变量来控制迭代。

例如,你可以有

  • 两个(或更多)变量,ij,用某些值初始化。
  • 循环控制语句,涉及对ij(以及其他,如果已定义)的操作和条件检查。
  • 最后,您可以控制ij (以及其他,如果已定义)的增量或减量。

示例构造可以是:

 for (int i = 0, j = n; i < n && j < n * 2; ++i, ++j)
                                            |^^^^^^^| -------- variable modification
      |               |   |^^^^^^^^^^^^^^^^^| ---------------- loop condition
      |^^^^^^^^^^^^^^^|--------------------------------------- initialization
Run Code Online (Sandbox Code Playgroud)