リストへのイテレータは、挿入と削除後も有効なままであるという事実を利用しようとしています (削除したばかりのイテレータを除く)。これもそうですかstd::list<T>::end();
次のことを試してみるとします。
typedef std::list<int> list_int;
list_int myList;
list_int::iterator iter = myList.end();
myList.push_back(1);
myList.push_back(2);
myList.push_back(3);
if(iter == myList.end()) {
/* do things here */
} else {
/* do different things here */
/* I don't expect this branch to ever execute */
}
他の場所では反復子のコレクションをこのリストに格納する可能性があり、 と比較して有効性をテストするため、これは重要ですmyList.end()
。挿入と削除の後でも、無効な反復子がそのまま残ることが重要です。