C++ - 回到循环开始而不检查条件
C++ - back to start of loop without checking the condition
在 perl 上编程,我们可以使用一个名为 'redo' 的智能函数 - 我们可以回到循环的开始,而无需查看条件。例如,当我们创建一个 table,我们必须在其中设置预期的 values/characters(例如 "a-b-c",没有别的)时,它很有用。
我想问一下C++函数中是否存在这样的。我将不胜感激。
没有 redo 关键字可以返回到循环的开头,但没有理由不能使用 goto
来完成。 (哦,我觉得很脏推荐goto
...)
int tries = 0;
for(int i=0; i<10; ++i) {
loop_start:
bool ok = ((i+tries)%3==0);
if(ok) {
++tries;
goto loop_start;
}
}
我觉得比较合理的方案是
int trie=0;
for(int i=0; i<10; i++) {
while((i+tries)%3==0 {
++tries;
}
}
如果您想不惜一切代价避免goto
,
int tries = 0;
for (int i=0; i<10; ++i) {do{
bool redo = ((i+tries)%3 == 0);
if (redo) { ++tries; }
else { break; }
} while(1); }
为什么不能使用简单的 while
循环?
auto is_okay = [](char x) { return x=='a' || x=='b'; };
container C;
for(std::size_t i=0; i!=C.size(); ++i) {
char x;
while(!is_okay(x=obtain_new_character())); // get new x until it's okay
C[i]=x;
}
或者,等效地,do while
循环
container C;
for(std::size_t i=0; i!=C.size(); ++i) {
char x;
do {
x=obtain_new_character();
} while(x!='a' && x!='b');
C[i]=x;
}
甚至 for
循环
container C;
for(std::size_t i=0; i!=C.size(); ++i) {
char x=0;
for(; x!='a' && a!='b'; x=obtain_new_character());
C[i]=x;
}
在 perl 上编程,我们可以使用一个名为 'redo' 的智能函数 - 我们可以回到循环的开始,而无需查看条件。例如,当我们创建一个 table,我们必须在其中设置预期的 values/characters(例如 "a-b-c",没有别的)时,它很有用。 我想问一下C++函数中是否存在这样的。我将不胜感激。
没有 redo 关键字可以返回到循环的开头,但没有理由不能使用 goto
来完成。 (哦,我觉得很脏推荐goto
...)
int tries = 0;
for(int i=0; i<10; ++i) {
loop_start:
bool ok = ((i+tries)%3==0);
if(ok) {
++tries;
goto loop_start;
}
}
我觉得比较合理的方案是
int trie=0;
for(int i=0; i<10; i++) {
while((i+tries)%3==0 {
++tries;
}
}
如果您想不惜一切代价避免goto
,
int tries = 0;
for (int i=0; i<10; ++i) {do{
bool redo = ((i+tries)%3 == 0);
if (redo) { ++tries; }
else { break; }
} while(1); }
为什么不能使用简单的 while
循环?
auto is_okay = [](char x) { return x=='a' || x=='b'; };
container C;
for(std::size_t i=0; i!=C.size(); ++i) {
char x;
while(!is_okay(x=obtain_new_character())); // get new x until it's okay
C[i]=x;
}
或者,等效地,do while
循环
container C;
for(std::size_t i=0; i!=C.size(); ++i) {
char x;
do {
x=obtain_new_character();
} while(x!='a' && x!='b');
C[i]=x;
}
甚至 for
循环
container C;
for(std::size_t i=0; i!=C.size(); ++i) {
char x=0;
for(; x!='a' && a!='b'; x=obtain_new_character());
C[i]=x;
}