我正在尝试删除 vector 的内容,但出现错误- vector 迭代器不可递增,为什么呢?

这是我的析构函数:

City::~City()
{
    vector <Base*>::iterator deleteIterator;
    for (deleteIterator = m_basesVector.begin() ; deleteIterator != m_basesVector.end() ; deleteIterator++)
        m_basesVector.erase(deleteIterator);
}

谢谢。

最佳答案

erase使迭代器无效。您不能再使用它。幸运的是,它返回一个可以使用的迭代器:

vector <Base*>::iterator deleteIterator = m_basesVector.begin();
while (deleteIterator != m_basesVector.end()) {
    deleteIterator = m_basesVector.erase(deleteIterator);
}

要么:
m_basesVector.clear();

您有责任释放 vector 中指针所指的内存吗?如果这是您要进行迭代的原因(并且您的真实程序具有未显示的更多代码,从而释放了循环中的那些对象),那么请记住,从 vector 的开头进行擦除是一种缓慢的操作,因为在每一步中, vector 的所有元素都必须向下移动一位。更好的方法是遍历 vector 以释放所有内容(然后使用clear()这个 vector ,尽管正如Mike所说,如果 vector 是要破坏的对象的成员,则没有必要)。

10-06 07:09