Есть вектор vec1, заполненый некоторыми данными, и есть индекс элемента.
То есть, что бы получить данные из первого вектора нужно выполнить что-то наподобие:
vec1[Index];
Требуется получить итератор на элемент вектора, то есть, что-то вроде:
Здравствуйте, ekamaloff, Вы писали:
E>Здравствуйте, srggal, Вы писали:
S>>Здравствуйте, <Аноним>, Вы писали:
S>>
S>>itData = std::advance( begin(), Index );
S>>
E>Скорее так:
E>
E>itData = vec1.begin();
E>std::advance( itData, Index );
E>
а какая разница? временный объект будет жив до конца полного выражения, в котором он используется, так что ссылка на него будет валидной до выхода из advance
"Что не завершено, не сделано вовсе" Гаусс
Re[3]: Получить итератор элемента vector по индексу ?
E>>itData = vec1.begin();
E>>std::advance( itData, Index );
E>>
S>а какая разница? временный объект будет жив до конца полного выражения, в котором он используется, так что ссылка на него будет валидной до выхода из advance
Здравствуйте, sadomovalex, Вы писали:
S>а какая разница? временный объект будет жив до конца полного выражения, в котором он используется, так что ссылка на него будет валидной до выхода из advance
Здравствуйте, ekamaloff, Вы писали:
E>Здравствуйте, sadomovalex, Вы писали:
E>>>
E>>>itData = vec1.begin();
E>>>std::advance( itData, Index );
E>>>
S>>а какая разница? временный объект будет жив до конца полного выражения, в котором он используется, так что ссылка на него будет валидной до выхода из advance
E>Тут дело немного в другом:
E>
Юзал advance и не задумывался, а почему он не возвращает ссылку на итератор, а вот ошибся, и задумался, рационального ответа так и не нашел, все только на уровне — "Исторически так сложилось".
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[7]: Получить итератор элемента vector по индексу ?
Здравствуйте, srggal, Вы писали:
S>Здравствуйте, sadomovalex, Вы писали:
S>Юзал advance и не задумывался, а почему он не возвращает ссылку на итератор, а вот ошибся, и задумался, рационального ответа так и не нашел, все только на уровне — "Исторически так сложилось".
наверное для того, чтобы не создавать дополнительных временных объектов
"Что не завершено, не сделано вовсе" Гаусс
Re[8]: Получить итератор элемента vector по индексу ?
Здравствуйте, srggal, Вы писали:
S>Здравствуйте, sadomovalex, Вы писали:
S>>наверное для того, чтобы не создавать дополнительных временных объектов
S>Я грил о возврате аргумента (по ссылке) первого аргумент.
т.е. просто добавить в advance return ?
"Что не завершено, не сделано вовсе" Гаусс
Re[10]: Получить итератор элемента vector по индексу ?
srggal wrote:
> S>т.е. просто добавить в advance return ? > Да, именно об этом я и грю.
Видимо, чтобы избежать след. граблей:
const_iterator current = ...;
const_iterator next = advance(current, 1);
if(*current != *next)
{
...
}
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[12]: Получить итератор элемента vector по индексу ?
Для меня это не рациональный ответ, ибо такая "забота" о пользователях итераторов никоим образом не согласуется с тем, что во многих случаях пользователь итераторов должен быть внимателен дабы не насиупить на грабли:
— *end();
— std::find( cont1.begin(), cont2.end() );
— etc.