Это три отдельные ошибки:
object = vectorOfObjects.end();
не будет работать, потому что end()
возвращает итератор, а object
- указатель. Обычно это разные типы (вектор может использовать необработанные указатели в качестве итераторов, но не во всех реализациях. Другие контейнеры требуют специальных типов итераторов).
object = &vectorOfObjects.end();
не работает, потому что вы берете адрес возвращенного итератора. То есть вы получаете указатель на итератор, а не указатель на Object
.
object = &(*vectorOfObjects.end());
не работает, потому что итератор end
не указывает на допустимый элемент. Он указывает один за концом последовательности. И так, это не может быть разыменовано. Вы можете разыменовать последний элемент в последовательности (который будет --vectorOfObjects.end()
), но не итератор, указывающий за конец.
Наконец, основная проблема / путаница может заключаться в том, что вы думаете, что итератор может быть преобразован в указатель. В общем, не может. Если ваш контейнер является вектором, вы гарантированно размещаете элементы непрерывно, как в массиве, и, таким образом, указатель будет работать. Но, скажем, для list
указатель на элемент бесполезен. Это не даст вам никакого способа добраться до следующего элемента next .