ネストされたループで反復ごとに1回だけ何かを行う最も賢い方法は何ですか?外側のループが非常に複雑なため、不変部分を引き出すことができません。これが私のC++の例です:
void foo::bar() {
if(oldCycle == tree.cycle) {
doSomething();
oldCycle++;
}
}
このメソッドは、tree.cycleがインクリメントされるまで頻繁に呼び出されます。oldCycleはfooのプライベートメンバー変数です
claas foo {
public: ...
private:
int oldCycle;
};
コンパイラはこのコードを最適化しますか、それともifチェックは反復ごとに実行されますか?
編集:ここでは、ループを使用してコードを要求したように、最初のループは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();
}
}