我遇到了一个问题,我想通过我的矢量并删除不再需要的元素。为什么它失败的原因很明显,但当我尝试我的天真方法时,我没有看到它。基本上,当我擦除一个元素时迭代器失效,并且循环无法继续。我所做的是以下几点:什么是遍历矢量和删除某些元素的正确方法
#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'。 –