<分区>
我遇到了一个问题,我想遍历我的 vector 并删除不再需要的元素。它失败的原因很明显,但是当我尝试我天真的方法时我没有看到它。基本上,当我删除一个元素时,迭代器会失效,并且循环无法继续。我所做的是:
#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);
}
}
所以很明显这行不通,我想知道这样做的正确/最佳方法是什么。如果没有找到合适的,我的下一步是用新的迭代器重新启动循环,但这似乎也是一种浪费。理想情况下,循环会使用新的迭代器从中断处继续?
谢谢。