好吧,這可能是非常基本的,但我從來沒有這樣做過。安全刪除指針向量
我有一個向量Particle
s,當他們離開可見屏幕時,我想要將它們抹去。我查了一下erase-remove成語,但我不知道如何做這個工作,因爲我還需要刪除Particle
實例。我試圖向後迭代,都沒有成功:
for (std::vector<Particle*>::reverse_iterator rit = particles.rbegin(); rit != particles.rend(); ++rit)
{
if (IsOffScreen((*rit)->pos))
{
delete (*rit.base());
particles.erase(rit.base());
}
}
在運行時崩潰,Visual Studio中說:"iterator cannot be decremented"
。我究竟做錯了什麼?有沒有更好的辦法?
當'rit'不是有效的迭代器時,你不能說'++ rit'。 –
你會發現['std :: vector :: erase'](http://en.cppreference.com/w/cpp/container/vector/erase)的返回值對解決你的問題特別有幫助,因爲它應該成爲新的迭代器值,而不是在擦除事件中遞增/遞減退出的值。 –
WhozCraig
使用索引以相反的順序。 –