2016-12-06 49 views
2

有各種各樣的occations需要迭代C++容器時進行修改。通過C++容器迭代進行修改的一般解決方案?

就像回調存儲在std::list中時一樣,當迭代並調用這些回調時,可能需要修改std::list

但是這不是安全的,這種問題是否有任何通用的解決方案?

+0

爲了在迭代過程中容器是可修改的,它需要被稱爲stable。 http://stackoverflow.com/questions/16709828/how-to-check-whether-a-container-is-stable – Lanting

+0

顯示你的代碼,我們可以幫你做到這一點。你的問題似乎是XY問題。 – Stargateur

回答

0

有時我需要在迭代時從容器中移除項目。 與c + + 11(擦除返回下一個迭代器),你可以做這樣的代碼。

std::vector<MyClass> vector; 
    std::vector<MyClass>::iterator it; 
    for(it=vector.begin();it!=vector.end();) 
    { 
    if(it->removeFromList()) 
    { 
     it=vector.erase(it); 
    } 
    else 
    { 
     it->doSomething(); 
     ++it; 
    } 
    } 

如何準確地編輯容器?

+0

這不是'for'循環的目的,使用'while'循環來實現這一點。用空格縮進你的代碼。 – Stargateur