当我使用vector :: erase时崩溃的原因是什么?

Apo*_*hay 2 c++ stl vector

我试图对矢量做一些操作.并且仅在某些情况下在向量上调用擦除.

这是我的代码

while(myQueue.size() != 1)
{
    vector<pair<int,int>>::iterator itr = myQueue.begin();
    while(itr != myQueue.end())
    {
        if(itr->first%2 != 0)
            myQueue.erase(itr);
        else
        {
            itr->second = itr->second/2;
            itr++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在第二次迭代中遇到崩溃.我得到了这个崩溃与消息矢量迭代器不兼容.

崩溃的原因是什么?

hmj*_*mjd 8

如果erase()被调用,则迭代器失效,然后在循环的下一次迭代中访问迭代器.std::vector::erase()在擦除的迭代器之后返回下一个迭代器:

itr = myQueue.erase(itr);
Run Code Online (Sandbox Code Playgroud)