Tenir compte: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!
}
(. D'accord, les pourparlers de titre abouting effacer une fin() iterator, mais trouver retournera fin() pour une clé inexistante)
Pourquoi effacement d'un non -Clé valide OK, mais l'effacement final() explose. Je ne pouvais pas voir une mention explicite de cela dans la norme?
J'ai essayé ceci sur VS2005 (lève une exception dans la configuration de débogage) et GCC 4.0.1 (100% CPU). Est-ce que la mise en œuvre dépend
Merci.
Pour clarifier: il existe différentes surcharges de erase(), et la version de l'itérateur nécessite un élément valide. – rlbond
effacer (it) est équivalent à effacer (it, ++ iterator (it)), ce qui m'aide à voir que erase (it) n'est pas valide avec it = map.end(). Vous auriez besoin d'un autre itérateur après .end(). –
Quelqu'un peut-il fournir un lien vers la norme? –