在嵌套循環中,每次迭代只執行一次最明智的方法是什麼?我不能拉出不變部分,因爲外部循環非常複雜。 這裏是我的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