Hola Orubatosu, sin ver bien donde revienta el programa, solo veo que estas declarando un iterador nuevo y no modificando el existente al volver it a la posición inicial, es decir aquí:
Si no me equivoco debería ser:
Ya que ese iterador solo está definido en ese ámbito, y elimina la visibilidad del iterador it que declaraste antes y evidentemente no modificas el valor del que quieres modificar. Por tanto el iterador it original no vuelve a la posición inicial nunca.
Hay otro problema y es que cuando modificas eso(si no lo modificas con la misma entrada te da un error de violación de acceso a la memoria) y pulsas intro se crea un bucle infinito (no sé donde está el fallo). Para comprobarlo puedes usar la siguiente entrada:
Saludos.
Código (cpp) [Seleccionar]
if (itb == B.end())
{
A.erase(it->first);
map<int, bool>::iterator it = A.begin();
}
Si no me equivoco debería ser:
Código (cpp) [Seleccionar]
if (itb == B.end())
{
A.erase(it->first);
it = A.begin();
}
Ya que ese iterador solo está definido en ese ámbito, y elimina la visibilidad del iterador it que declaraste antes y evidentemente no modificas el valor del que quieres modificar. Por tanto el iterador it original no vuelve a la posición inicial nunca.
Hay otro problema y es que cuando modificas eso(si no lo modificas con la misma entrada te da un error de violación de acceso a la memoria) y pulsas intro se crea un bucle infinito (no sé donde está el fallo). Para comprobarlo puedes usar la siguiente entrada:
Código [Seleccionar]
1
Salida de la funcion muestra: 1
2
Bucle infinito
Saludos.