Ответ 1
По соглашению "NULL-итератор" для контейнеров, который используется для указания отсутствия результата, сравнивается с результатом container.end()
.
std::vector<X>::iterator iter = std::find(my_vec.begin(), my_vec.end(), x);
if (iter == my_vec.end()) {
//no result found; iter points to "nothing"
}
Однако, поскольку итератор контейнера по умолчанию не связан с каким-либо конкретным контейнером, нет хорошего значения, которое может потребоваться. Таким образом, это просто неинициализированная переменная, и единственная легальная операция, которую нужно сделать с ней, - это присвоить ей действительный итератор.
std::vector<X>::iterator iter; //no particular value
iter = some_vector.begin(); //iter is now usable
Для других типов итераторов это может быть неверно. Например, в случае istream_iterator
построенный по умолчанию итератор представляет (сравнивает равно) с istream_iterator
, который достиг EOF входного потока.