получить указатель из итератора
От: B0FEE664  
Дата: 06.12.22 18:00
Оценка: 2 (1)
Есть некий итератор стандартного контейнера, а из него надо получить указатель на объект этого контейнера.
Многие советуют использовать конструкцию вида:
ptr = &*it;
но для past-the-end итератора такая конструкция не валидна.

Вроде бы для past-the-end итератора можно использовать конструкцию вида:
ptr = it.operator->();
но у меня возникли сомнения...
Поэтому вопросы следующие:
Есть ли гарантия, что it.operator->() вернёт именно указатель, а не некий тип его имитирующий?
Верно ли, что если it — это past-the-end итератор, то результат it.operator->() — это past-the-end указатель? Или это зависит от типа контейнера?

Верно ли, что для пустого контейнера x, следующий код — это UB:
bool bEmpty = std::begin(x).operator->() == std::end(x).operator->()

? Или же есть гарантия, что для такого случая значения указателей устанавливаются в NULL и всё ok?
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.