c++ - for循环中的计数器在执行后错误地递增
问题描述
我有 3 个嵌套循环,其中代码无论如何都不会修改计数器,我需要最顶层循环计数器的值以便稍后在代码中使用。看起来像这样
int i;
for( i = 0; !found && i <f_i.size();i++){
for(unsigned int j = 0; !found && j < f_g.size();j++){
for(unsigned int k = 0; !found && k < f_g.size();k++){
///Do Stuff
found = (/*Condition that's fulfilled after 2 iterations on k*/);
}
}
}
//Stuff that uses i
在最内层循环的 2 次迭代后满足条件,因此i
此时值为 0。使用 GDB,我看到在最顶层循环中检查条件后 i 的值跳到 1,这在我的程序后面给了我一个错误,或者更糟的是越界访问。
提前致谢
解决方案
由于 for 循环的第三个表达式,变量 i 递增
int i;
for( i = 0; !found && i <f_i.size();i++){
^^^^
for(unsigned int j = 0; !found && j < f_g.size();j++){
for(unsigned int k = 0; !found && k < f_g.size();k++){
///Do Stuff
found = (/*Condition that's fulfilled after 2 iterations on k*/);
}
}
}
为避免这种情况,您可以编写例如
int i;
for( i = 0; !found && i <f_i.size();){
for(unsigned int j = 0; !found && j < f_g.size();j++){
for(unsigned int k = 0; !found && k < f_g.size();k++){
///Do Stuff
found = (/*Condition that's fulfilled after 2 iterations on k*/);
}
}
i += !found;
}
或者代替表达式语句
i += !found;
你可以使用 if 语句
if ( !found ) ++i;
此外,如果变量i
将在循环之前初始化,例如像
int i = 0;
while ( !found && i < f_i.size() ){
for(unsigned int j = 0; !found && j < f_g.size();j++){
for(unsigned int k = 0; !found && k < f_g.size();k++){
///Do Stuff
found = (/*Condition that's fulfilled after 2 iterations on k*/);
}
}
i += !found;
}
推荐阅读
- json - 如何解析具有字典键:值对的 json 数据?我正在尝试提取符号和值对
- macos - mkdir -p [要创建的目录]:“-p”代表什么?
- typescript - 使用 typescript 在 react-admin v3 中扩展数据提供者
- ios - iOS:动画占位符,如材料设计文本字段占位符
- c++ - 如何在 C++11 中检查分离线程的状态?
- python - 如何按名称获取外键表字段
- swift - 如何以通用方法获取 Firestore 文档 ID?
- javascript - 如何在 VueJS 中将值从一个子组件传递到另一个子组件?
- javafx - JavaFx 从选中的 CheckBox 中获取文本
- python-3.x - 在使用依赖变量和三个自变量的多元回归中实现 OLS 时,numpy 的 Patsy 错误是存在的