Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

не работает итератор вектора указателей

8.7K
09 июня 2006 года
Rubicon
55 / / 28.10.2005
Не могу понять, почему не получается обратиться к объекту через итератор вектора, в который помещен указатель на этот объект. Если в вектор помещать просто объект, тогда (ясное дело) все работает, но это займет лишюю память (я объект создаю динамически, а при помещении в вектор происходит копирование объекта, насколько мне известно), поэтому в вектор помещаю лишь указатели. По этой причине приходится писать кучу кода для всевозможных поисков, чере итераторы все было бы куда элегантней и кратче.
Если я где-то неправ, пожалуйста, поправьте. Спасибо!
3
10 июня 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=Rubicon]Не могу понять, почему не получается обратиться к объекту через итератор вектора, в который помещен указатель на этот объект.
[/QUOTE]
Телепаты в отпуске, код в студию.

[QUOTE=Rubicon] Если в вектор помещать просто объект, тогда (ясное дело) все работает, но это займет лишюю память (я объект создаю динамически, а при помещении в вектор происходит копирование объекта, насколько мне известно), поэтому в вектор помещаю лишь указатели.
[/QUOTE]
А что тебе мешает удалить созданный объект, если он не нужен?
562
10 июня 2006 года
tarekon
175 / / 19.08.2003
Насколько я помню, итератор сам по себе - указатель на объект, помещенный в вектор (в первом приближении). Если у тебя в вектор помещены указатели, то тебе придется пройти по цепочке "указатель на указатель". В этом может быть ошибка. Опять-таки дальше моих телепатических способностей не хватает, давай код!
8.7K
15 июня 2006 года
Rubicon
55 / / 28.10.2005
Благодярю, за попыьки телепатии и приношу извинения - как тут без кода... вот:
Код:
// думаю, структура класса TApex не принципиальна

в некотором *.h-нике
typedef vector<TApex*> TApexList;
...........
// где-то в программе
 TApexList::iterator i;
 i = ApexList.begin();
 for(;i!=ApexList.end(); i++)
 {
  i->UID = 1;// ***
 }

При попытке компиляции ругается на строку с комментарием "***":
"Pointer to structure required on left size of -> or ->*"
Я что-то не так делаю или с указателя на объект такой фокус не проходит?
To Green: конечно можно, проблемы в общем-то нет. Просто чисто акодемический интререс --- а можно ли так (через список указателей).
9.4K
15 июня 2006 года
_nоrth_
99 / / 24.04.2006
(*i)->UID = 1;
585
16 июня 2006 года
honeybeer
297 / / 06.09.2004
[QUOTE=_nоrth_](*i)->UID = 1;[/QUOTE]
В точку! Итератор сам по сути указатель, поэтому ты можешь так легко использовать его в качестве счетчика. Разыменовывая итератор, получаешь доступ к собственно элементу вектора.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог