从std :: vector连续删除的安全方法?

jma*_*erx 2 c++ iterator vector

我认为以下代码可以工作,但是当目标小部件位于向量的末尾时,它会崩溃.

for(std::vector<AguiWidget*>::iterator it = children.begin();
        it != children.end(); ++it)
    {
        if((*it) == widget)
            it = children.erase(it);
    }
Run Code Online (Sandbox Code Playgroud)

我想要它通过并删除它找到的小部件的任何实例.我知道这个方法是N ^ 2但是因为这是事件驱动的,所以很好.我只是不知道为什么会失败.当它,'它'==小部件.

谢谢

Bla*_*ace 7

您可以使用erase-remove惯用法删除所有等于的元素widget.

children.erase(remove(children.begin(), children.end(), widget), children.end());
Run Code Online (Sandbox Code Playgroud)