Каково значение по умолчанию итератора?

Для какого-либо контейнера STL, который я использую, если я объявляю итератор (этого конкретного контейнерного типа) использование конструктора по умолчанию итератора, к чему будет инициализирован итератор?

Например, я имею:

std::list<void*> address_list;
std::list<void*>::iterator iter;

К чему будет инициализирован проход?

60
задан Alexandre C. 3 August 2010 в 09:27
поделиться

3 ответа

По соглашению "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 входного потока.

52
ответ дан 24 November 2019 в 17:51
поделиться

Конструктор по умолчанию инициализирует итератор на единичное значение:

Итераторы также могут иметь единичные значения, не связанные с какой-либо последовательностью. [ Пример: После объявления неинициализированного указателя x (как в случае int* x;), всегда следует считать, что x имеет сингулярное значение указателя. -конец примера ] Результаты большинства выражений не определены для сингулярных значений [24.2.1 §5]

22
ответ дан 24 November 2019 в 17:51
поделиться

Итератор не инициализирован, так же как int x; объявляет целое число, которое не инициализировано. Оно не имеет правильно определенного значения.

11
ответ дан 24 November 2019 в 17:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: