Возвращает указатель на объект, на который указывает iter, используя `

#c #vector #iterator

#c #вектор #итератор

Вопрос:

У меня есть итератор, и я хочу вернуть указатель на элемент, на который он указывает.

Нормально ли это делать?

return amp;*iter;

На самом деле это не кажется хорошей идеей.

Комментарии:

1. если vector<int> , то вы бы возвращали *iter, а не amp;*iter.

2. @jagansai: Почему это? [редактировать: только что заметил несоответствие в q]

3. @weezybizzle: Указатель на элемент или element? Выберите один.

Ответ №1:

Это совершенно нормально. Но имейте в виду, что если итератор относится к контейнеру, который освобождает и перераспределяет память при изменении размера, то возвращенный указатель станет недействительным. Например, если итератор является итератором std::vector , то iter и amp;*iter оба становятся недействительными, если базовый вектор изменяет свои размеры.

Кстати, название темы и то, что вы сказали в самой первой строке, не совпадают:

Возвращает указатель из iter с помощью amp;*iter (title)

У меня есть итератор, и я хочу вернуть элемент, на который он указывает. (первая строка)

Оба они означают разные. То, что вы написали, т. е. return amp;*iter это то, что вы сказали в названии. Но второе утверждение означает это:

 return *iter;
  

Он возвращает элемент, на который синтаксически указывает итератор. Он не возвращает указатель на элемент. Это безопасно, даже если вектор изменяет размер сам.

Комментарии:

1. Я упустил это из виду, извините, что здесь действительно поздно.