在嵌套循环中,每次迭代只执行一次最明智的方法是什么?我不能拉出不变部分,因为外部循环非常复杂。 这里是我的C++例子:在嵌套循环/循环不变中检查一次
void foo::bar() {
if(oldCycle == tree.cycle) {
doSomething();
oldCycle++;
}
}
这种方法被称为非常频繁,直到tree.cycle递增。 oldCycle是FOO
claas foo {
public: ...
private:
int oldCycle;
};
的私有成员变量该编译器优化的代码还是会检查是否运行每次迭代?
编辑:这里像请求循环代码: 第一个循环是在mexFunction()方法中,该算法在matlab中启动并调用mexFunction。
void mexFunction(...) {
for(tree.cycle = 0; tree.cycle<maxIt; tree.cycle++) {
foo->startfoo();
}
}
,这里是另一个循环:
void foo::startfoo() {
for(tree.cur_it = 0; tree.cur_it <=39; tree.cur_it++) {
bar();
}
}
你是什么意思?在正常的循环中,每次迭代只发生一次*。你的两个例子都没有显示* single *循环。告诉我们你在问什么。 – jalf
如你所说,你无法优化这个检查,因为'tree.cycle'会不时变化。如果您在发生这种变化时设置了标志,则必须检查标志,因此没有任何结果。 – Gorpik