Foro de elhacker.net

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
  1. void NucleoMotor::LimpiarVector()
  2. {
  3.  // Elimina los elementos del vector
  4.  vector<cSprite*>::iterator ivSprite;
  5.  for (ivSprite = m_vcSprites.begin();
  6.        ivSprite != m_vcSprites.end();
  7.        ivSprite++)
  8.  {
  9.  
  10.    delete (*ivSprite);
  11.    m_vcSprites.erase(ivSprite);
  12.    ivSprite--;
  13.  }
  14. }

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
  1. 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
  1. void NucleoMotor::LimpiarVector()
  2. {
  3.  
  4.   vector<cSprite*>::iterator it = m_vcSprites.begin();
  5. while(it != m_vcSprites.end()) {
  6.         if(*it > 0)
  7. it = m_vcSprites.erase(it);
  8.         else
  9.                 it++;
  10. }
  11. }

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?