VC++7.1以降のSTLのiteratorに関しての質問です。std::vectorやstd::mapなどのcontainerを使用する際のcontainerのelementのeraseのときは(std::vectorに限りませんが)、たとえばvector<T>::iterator i = container.begin();while ( i != container.end() ) { if ( 要素を削除したいなら ) { i = container.erase( i ); }}とイディオムのように、呪文のようにずっとコードを書いてきました(勉強不足は承知しています)。しかしstd::vectorの場合、codeを見ていて、i = container,erase( i )は必要がないと理解しました。std::mapやstd::listは彼のcodeが必要なのも想像できますし、traceしていて確信も得たと思っています。あくまでVC++7.1以降の話ですが…。そこで質問なのですが、上記のcodeのi = container.erase( i )はすべてのSTLのcontainerに通用するものなのでしょうか?それとも if ( 要素を削除したいなら ) { container.erase( i ); ++i; }と書くのがSTLを扱う上でbetterなのでしょうか?
- Child Tree -