std::list<int> myList;
std::list<int> myIter = myList.begin();
L'iteratore ha lo stesso valore come se si stesse inizializzandolo con myList.end()
. L'iteratore è inizializzato alla posizione di fine passato. Anche dopo aver premuto un elemento nella lista, l'iteratore punta ancora uno-oltre-la-fine. Se lo si incrementa, si invoca un comportamento non definito.
UPDATE:
Ad esempio, se si compila il frammento con GCC con -D_GLIBCXX_DEBUG, l'eseguibile risultante abortire: tipi
/usr/include/c++/4.6/debug/safe_iterator.h:236:error: attempt to increment
a past-the-end iterator.
Objects involved in the operation:
iterator "this" @ 0x0x7fffc9548fb0 {
type = N11__gnu_debug14_Safe_iteratorINSt9__cxx199814_List_iteratorIiEENSt7__debug4listIiSaIiEEEEE (mutable iterator);
state = past-the-end;
references sequence with type `NSt7__debug4listIiSaIiEEE' @ 0x0x7fffc9548fb0
}
zsh: abort (core dumped) ./listiter
Penso che questa sia una buona domanda perché mi ha fatto pensare, hmm, in realtà. È una lista ... forse potrebbe funzionare ... (Ovviamente non lo è) – jcoder