#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. Я упустил это из виду, извините, что здесь действительно поздно.