イテレータによって要素、ポインタを消去すると、イテレータが無効になることは(すべて)わかっています。次に例を示します。
std::map< .. > map_;
std::map< .. >::iterator iter;
// ..
map_.erase( iter ); // this will invalidate `iter`.
しかし、どうですか:
map_.erase( map_.begin() );
これは安全ですか?map_.begin()
マップの (新しい) 最初の要素を指す有効な反復子になりますか?
「テストする」は解決策ではありません。