Большинство итераторов не имеют глобальных специальных значений так же, как все указатели могут быть NULL.Однако, как правило, вы будете работать с определенными контейнерами, и если у вас будет один итератор для каждого контейнера, то вы можете использовать end()
в качестве значения часового:
std::list<int> mylist;
std::list<int>::iterator it = mylist.end();
/* do stuff */
if (it == mylist.end()) { ... }
Я не уверен, что вставка/ delete делает недействительным итератор end()
, поэтому, если вы планируете модифицировать свой контейнер, возможно, также сохраните копию исходного конца:
std::list<int>::iterator end = mylist.end(), it = end;
if (it == end) { ... }
Хотя, опять же, я на самом деле не уверенесли он четко определен для сравнения двух недопустимых итераторов (в случае, если два действительно станут недействительными).