我遇到了一個問題,我想通過我的矢量並刪除不再需要的元素。爲什麼它失敗的原因很明顯,但當我嘗試我的天真方法時,我沒有看到它。基本上,當我擦除一個元素時迭代器失效,並且循環無法繼續。我所做的是以下幾點:什麼是遍歷矢量和刪除某些元素的正確方法
#define GOOD 1
#define BAD 0
struct Element
{
Element(int isGood) : good(isGood){}
bool good;
};
int main()
{
std::vector<Element> arr;
arr.push_back(Element(BAD));
arr.push_back(Element(GOOD));
arr.push_back(Element(BAD));
arr.push_back(Element(GOOD));
//__CLEAN ARRAY__//
for (auto it = arr.begin(); it != arr.end(); ++it)
{
if ((*it).good == false) arr.erase(it);
}
}
所以,很明顯,這是不行的,我想知道這樣做的正確的/最好的辦法是。我的下一步將是重新啓動循環,如果沒有找到好的迭代器,但這也看起來很浪費。理想情況下,循環會繼續使用新的迭代器停止。
謝謝。
閱讀關於'std :: remove_if'。 –