Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: cazagavilan en 13 Agosto 2013, 23:22 PM

Título: Duda iterator // Vector iterator not decrementable
Publicado por: cazagavilan en 13 Agosto 2013, 23:22 PM
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!
Título: Re: Duda iterator // Vector iterator not decrementable
Publicado por: Stakewinner00 en 13 Agosto 2013, 23:34 PM
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.
Título: Re: Duda iterator // Vector iterator not decrementable
Publicado por: amchacon en 13 Agosto 2013, 23:35 PM
Este es el uso correcto de erase:

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

Al borrar, devuelve el nuevo iterador.
Título: Re: Duda iterator // Vector iterator not decrementable
Publicado por: cazagavilan en 14 Agosto 2013, 09:55 AM
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!
Título: Re: Duda iterator // Vector iterator not decrementable
Publicado por: frankener1986 en 14 Agosto 2013, 13:17 PM
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?