我试图对矢量做一些操作.并且仅在某些情况下在向量上调用擦除.
这是我的代码
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)
我在第二次迭代中遇到崩溃.我得到了这个崩溃与消息矢量迭代器不兼容.
崩溃的原因是什么?
如果erase()被调用,则迭代器失效,然后在循环的下一次迭代中访问迭代器.std::vector::erase()在擦除的迭代器之后返回下一个迭代器:
itr = myQueue.erase(itr);
Run Code Online (Sandbox Code Playgroud)