Duda iterator // Vector iterator not decrementable

Iniciado por cazagavilan, 13 Agosto 2013, 23:22 PM

0 Miembros y 1 Visitante están viendo este tema.

cazagavilan

Buenas !


Código (cpp) [Seleccionar]
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!

Stakewinner00

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.

amchacon

Este es el uso correcto de erase:

Código (cpp) [Seleccionar]
ivSprite = m_vcSprites.erase(ivSprite);

Al borrar, devuelve el nuevo iterador.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

cazagavilan

Solucionado!

Código (cpp) [Seleccionar]
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!

frankener1986

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?