我正在尝试删除 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 是要破坏的对象的成员,则没有必要)。