2016-06-01 6 views
1

私はこのようなマップ定義とその後の操作を持っています。順序付きマップでの反復子の有効性

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; 

「それ」は他の要素の消去後に有効になりますか?

答えて

3

"it"は他の要素の消去後に有効になりますか?

はい、std::map::eraseは、消去された要素に対する参照とイテレータのみを無効にします。

消去された要素への参照とイテレータは無効です。他の参照とイテレータは影響を受けません。

注コードm.erase(m.find(3));は何も見つからなかった場合std::map::findend()イテレータを返すので、潜在的な問題があるが、end()イテレータはstd::map::eraseで使用することはできません。

イテレータposは、有効で参照不可能である必要があります。したがって、end() イテレータ(これは有効ですが、参照不可能ではありません)はの値として として使用できません。

1

はいそうです。マップの消去が実行されると、消去されたイテレータのみが無効になります。

関連する問題