我正在尝试对 vector 进行一些操作。并仅在某些情况下调用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++;
}
}
}
我在第二次迭代中崩溃。并且消息 vector 迭代器不兼容导致崩溃。
崩溃的原因可能是什么?
最佳答案
如果调用erase()
,则迭代器无效,然后在循环的下一次迭代中访问该迭代器。 std::vector::erase()
返回擦除的迭代器之后的下一个迭代器:
itr = myQueue.erase(itr);
关于c++ - 使用vector::erase时崩溃的原因可能是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10737815/