Buenas !
void NucleoMotor::LimpiarVector()
{
// Elimina los elementos del vector
vector<cSprite*>::iterator ivSprite;
for (ivSprite = m_vcSprites.begin();
ivSprite != m_vcSprites.end();
ivSprite++)
{
delete (*ivSprite);
m_vcSprites.erase(ivSprite);
ivSprite--;
}
}
El error es en la ejecución del programa.
Gracias!
No entiendo demasiado lo k hace el código pero si no me equivoco en la declaración del for estas haciendo que la variable ivSprite aumente con ivSprite++ pero dentro del for estas haciendo que disminuya con ivSprite-- y si no me equivoco el programa tendra una variable que pasa de x a y a x a y a x y así indefinidamente.
Este es el uso correcto de erase:
ivSprite = m_vcSprites.erase(ivSprite);
Al borrar, devuelve el nuevo iterador.
Solucionado!
void NucleoMotor::LimpiarVector()
{
vector<cSprite*>::iterator it = m_vcSprites.begin();
while(it != m_vcSprites.end()) {
if(*it > 0)
it = m_vcSprites.erase(it);
else
it++;
}
}
Gracias!
Eso ocurre porque intentas acceder al siguiente nodo después de borrar el actual. Si no me equivoco, podrías hacer erase(++it). Además, no existe en STL un clear() que hace esa función?