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