texto teclado sobreescribir quitar que porque letra escribo escribir demas delante cuando con como borra adelante c++ stl

c++ - teclado - porque se borra lo que escribo



borrar mientras se itera (2)

Posibles duplicados:
Vector.erase (Iterator) causa mal acceso a la memoria
iterar vector, eliminar ciertos elementos a medida que avanzo.

Hola, escribí esto, pero recibo algunos errores al ejecutarlo

for (vector< vector<Point> >::iterator track = tracks_.begin(); track != tracks_.end(); track++) { if (track->empty()) { // if track is empty, remove it tracks_.erase(track); track++; // is this ok? }else { //if there are points, deque track->erase(track->begin()); //my program crashes here after a while... ;( } }

Tengo un vector de vector de puntos (2 ints) cuyas pistas invoco (1 pista es 1 vector de puntos) Quiero verificar cada pista y si contienen puntos, elimine la primera, de lo contrario borre la pista. ¿Es esto correcto?

Gracias por adelantado.



El erase() un vector erase() invalida los iteradores existentes, pero devuelve un nuevo iterador que apunta al elemento después del que se eliminó. Este iterador devuelto se puede usar para continuar iterando sobre el vector.

Su ciclo podría escribirse así:

vector< vector<Point> >::iterator track = tracks_.begin(); while (track != tracks_.end()) { if (track->empty()) { // if track is empty, remove it track = tracks_.erase(track); } else { //if there are points, deque track->erase(track->begin()); ++track; } }