По соглашению "NULL iterator" для контейнеров, который используется для указания отсутствия результата, сравнивается равным результату 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 входного потока.