我正在尝试对 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/

10-11 18:13