considerar:map.erase (map.end())?
#include <map>
int main()
{
std::map< int, int > m;
m[ 0 ] = 0;
m[ 1 ] = 1;
m.erase(0); // ok
m.erase(2); // no-op
m.erase(m.find(2)); // boom!
}
(. OK, por lo que las conversaciones título abouting borrar un fin() iterador, pero find devolverá final() para una clave inexistente)
Por qué está borrando un no -existente clave OK, pero borrando final() explota. No pude ver ninguna mención explícita de esto en el estándar?
He intentado esto con VS2005 (arroja una excepción en la configuración de depuración) y GCC 4.0.1 (100% CPU). ¿Depende de la implementación?
Gracias.
Para aclarar: hay diferentes sobrecargas de erase(), y la versión del iterador requiere un elemento válido. – rlbond
borrar (it) es equivalente a borrar (it, ++ iterator (it)), lo que me ayuda a ver que el borrar (it) no es válido con it = map.end(). Necesitarías otro iterador después de .end(). –
¿Alguien puede proporcionar un enlace al estándar? –