2016-06-01 8 views
1

Ich habe eine Kartendefinition und nachfolgende Manipulation wie folgt.Iterator-Gültigkeit mit geordneten Karten

map<int,string> m; 
m.insert(std::pair<int,string>(1,"A"); 
m.insert(std::pair<int,string>(2,"B"); 
m.insert(std::pair<int,string>(3,"C"); 
m.insert(std::pair<int,string>(4,"D"); 
auto it = m.find(2); 
m.erase(m.find(3)); 
cout<< it->second; 

Wird "es" nach einem Löschen auf ein anderes Element gültig sein?

Antwort

3

Wird "es" nach einem Löschen auf ein anderes Element gültig sein?

Ja, std::map::erase werden nur die Referenzen und Iteratoren für die gelöschten Elemente ungültig machen.

Referenzen und Iteratoren für die gelöschten Elemente werden ungültig gemacht. Andere Referenzen und Iteratoren sind nicht betroffen.

Beachten Sie den Code m.erase(m.find(3)); hat ein potenzielles Problem, da std::map::findend() Iterator zurück, wenn nichts gefunden wird, aber end() Iterator kann nicht mit std::map::erase verwendet werden.

Der Iterator pos muss gültig und dereferenzierbar sein. Daher kann der end() Iterator (der gültig, aber nicht dereferenzierbar ist) nicht als ein Wert für pos verwendet werden.

1

Ja wird es. Nur der gelöschte Iterator wird ungültig gemacht, wenn eine Kartenlöschung durchgeführt wird.

Verwandte Themen