每次调用一个函数时如何在循环中迭代一次?

时间:2020-11-02 20:04:06

标签: c++ loops iteration static-variables

我有一个循环,并且每次调用该函数都要迭代一次。 这是我的代码:

#include <iostream>

void iter(int max_i, int max_j){

        static int i = 0;
        static int j = 0;
        for (; i< max_i; i++ ){
                for(; i<max_j; j++){
                        std::cout << i << " " << j << std::endl;
                        return;
                }
        }
}


int main(){

        iter(4,4);
        iter(4,4);
        iter(4,4);
        return 0;

}

但是结果表明,每次调用该函数时,它都从零开始。

amirreza@time:/tmp$ g++ iterate.cpp 
amirreza@time:/tmp$ ./a.out 
0 0
0 0
0 0

1 个答案:

答案 0 :(得分:1)

从您的代码开始,应该是

void iter(int max_i, int max_j){
    static int i = 0;
    static int j = 0;

    if (i < max_i)
    {
        std::cout << i << " " << j << std::endl;
        if (++j >= max_j) {
            ++i;
            j = 0;
        }
    }
}

Demo

最好将所有这些变量都放在类中,以避免可能会出现问题的静态变量。像这样:

truct IterData
{
    const int max_i;
    const int max_j;
    int i = 0;
    int j = 0;
};

bool iter(IterData& data){
    std::cout << data.i << " " << data.j << std::endl;
    if (++data.j >= data.max_j) {
        ++data.i;
        data.j = 0;
    }
    return data.i < data.max_i;
}

int main()
{
    IterData data{4, 4};

    while (iter(data));
}

Demo

C ++ 20具有共同的例程,可以最自然地编写循环。