每次调用函数时如何在循环中迭代一次?
how to iterate one time over a loop each time call a function?
我有一个循环,每次调用该函数时都想迭代一次。
这是我的代码:
#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
根据你的代码,应该是
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;
}
}
}
最好在 class 中包含所有这些变量,以避免可能有问题的静态。类似于:
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));
}
C++20 co-routine 允许最自然地编写循环。
我有一个循环,每次调用该函数时都想迭代一次。 这是我的代码:
#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
根据你的代码,应该是
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;
}
}
}
最好在 class 中包含所有这些变量,以避免可能有问题的静态。类似于:
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));
}
C++20 co-routine 允许最自然地编写循环。