我正在尝试从特定索引处的向量中删除对象。向量迭代器会跟踪整个程序中的索引。在下面的代码中,第一个IF语句运行完美。但是,如果迭代器指向除最后一个元素以外的任何其他位置,则从向量中删除该元素,然后递增迭代器。程序崩溃并显示“迭代器不可递增”。

我多次运行调试器,一切看起来都正确,所以看不到丢失的内容吗?

vector<Card> myVector; //container to hold collection of cards.
vector<Card>::iterator myVectorIterator; //points to each "card" in the collection.

Card Collection::remove()
{
    if (myVectorIterator== myVector.end()-1) { //at the last card
        //erase the "current" card
        myVector.erase(myVectorIterator);
        //update to the first card.
        myVectorIterator= myVector.begin();
       }
    else
    {

        myVector.erase(myVectorIterator);

        //crashes here!
        myVectorIterator++;
    }

return *myVectorIterator;


}

最佳答案

erase使迭代器无效,因此以后不能使用它。但是在删除元素之后,它有助于将迭代器返回到元素:

myVectorIterator = myVector.erase(myVectorIterator);

关于c++ - 如何从 vector 中删除元素并更新迭代器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24739599/

10-09 08:21