Bueno... lo reconozco, no se que he hecho mal
it=v.begin();
double dist;
for (; it!=v.end(); it++){
dist = abs (medvec - *it);
if (dist > med) v.erase(it);
}
Os pongo en antecedentes, esto es sencillo.
Tengo un vector de números reales, y pretendo borrar del mismo los que estén a mas de una distancia específica de la media. No parece problemático, pero ahaha...
El error me aparece en esta línea:
if (dist > med) v.erase(it);
Supongamos 5 valores: 1.0, 2.0, 3.0, 4.0, 5.0
Los valores que cumplen con la condición del if son el primero y el último
El primero es borrado, pero cuando el programa llega a intentar borrar la última posición del vector, simplemente "revienta".
Si cojo en otra parte del programa, creo un iterador para ese vector, lo posiciono en la posición del "5.0" y hago un erase(it)... funciona, no me da el problema.
Precisamente al usar iteradores, asumo que este nunca va a ponerse fuera de rango, ya que en el bucle if especifico claramente que "mientras it != v.end() con lo que no puedo suponer (en principio) que estoy intentando borrar una casilla inaccesible del vector.
He hecho algunas comprobaciones obviamente, y si por ejemplo limito el bucle a una vuelta menos ( it != v.end()-1) entonces el programa funciona sin errores, y se para tras llegar al "4.0"
El problema llega a la hora de intentar borrar la última casilla, cosa que aparentemente si puedo hacer "a lo bruto".
Si cambio el "erase" por un "cout << *it" veo que efectivamente, los números que cumplen la condición son los adecuados.
La verdad es que estoy atascado y no tengo claro que es lo que falla.