:map.erase (map.end())? Betrachten
#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, so der Titel spricht abouting ein Ende() Iterator zu löschen, sondern findet Ende() für einen nicht vorhandenen Schlüssel zurück)
Warum ein nicht radiert -existent Taste OK, aber löscht Ende() explodiert. Ich konnte im Standard keine explizite Erwähnung finden.
Ich habe dies auf VS2005 (löst eine Ausnahme in Debug-Konfiguration) und GCC 4.0.1 (100% CPU) versucht. Ist es implementierungsabhängig?
Danke.
Zur Verdeutlichung: Es gibt verschiedene Überladungen von Erase(), und die Iterator-Version benötigt ein gültiges Element. – rlbond
erase (it) ist äquivalent zu löschen (it, ++ iterator (it)), was mir hilft zu sehen, dass erase (it) ungültig ist mit it = map.end(). Sie benötigen einen weiteren Iterator nach .end(). –
Kann jemand einen Link zum Standard liefern? –