一行中有两个for循环c ++

时间:2016-10-20 03:09:41

标签: c++ arrays for-loop vector iteration

我的问题是在一行代码中有两个for循环。例如:

void sieve(int N) {
    bool isPrime[N+1];
    for(int i = 0; i <= N;++i) {
        isPrime[i] = true;
    }
    isPrime[0] = false;
    isPrime[1] = false;
    for(int i = 2; i * i <= N; ++i) {
         if(isPrime[i] == true) {
             // Mark all the multiples of i as composite numbers
             for(int j = i * i; j <= N ;j += i)
                 isPrime[j] = false;
        }
    }
}

显然它确实用于二维数组或向量,但是它们会用于什么实际例子?因为很难在单独的行中显示行和列。此外,由于循环条件在同一条线上,因此它们会同时发生变化,这将更难控制整个过程。

很快,这个的实际目的是什么?

2 个答案:

答案 0 :(得分:4)

简短的回答:使代码更难阅读的实际目的通常是没有(一行上有两个for循环)。无论您使用:

,它都不会对编译器的输出产生任何功能差异
for (int i; i > n; i++) for (int j; j > m; j++)
{
    //Statements
    myArray[i][j];
}

for (int i; i > n; i++) 
{
    for (int j; j > m; j++)
    {
        //Statements
        myArray[i][j];
    }
}

然而,除了混淆竞争之外,以难以阅读的方式编写代码对于可维护性,可读性和可调试性是不利的。上面的第二个选项更容易快速阅读和理解,并且更容易调试。

有许多样式指南涵盖了这一点,提供了“好”代码的示例,以及以某种方式编写代码的推理。

请查看以下链接的问题:programming style guide for C

答案 1 :(得分:0)

在一行上没有使用多个for循环的目的。

for (int i; i > n; i++) for (int j; j > m; j++) Statements

相当于:

for (int i; i > n; i++) {
    for (int j; j > m; j++) {
        Statements
    }
}

删除大括号只会改变代码的样子。最后没关系。在某些情况下,它可以使您的代码看起来更清晰。