【发布时间】:2017-06-11 06:33:00
【问题描述】:
我遇到了一个问题,我想遍历我的向量并删除不再需要的元素。它失败的原因很明显,但是当我尝试我的幼稚方法时并没有看到它。基本上,当我删除一个元素时,迭代器会失效,并且循环无法继续。我所做的如下:
#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。
标签: c++ arrays loops vector iterator