Доступ к вектору через указатель

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
programius
Сообщения: 1
Зарегистрирован: 22 янв 2006, 22:15

создал указатель на вектор:

Код: Выделить всё

vector<int> IntVec;
vector<int> * pointer; 

 

Как теперь через указатель получить
Доступ к елементам вектора?

Пробовал:

pointer[номер елем.] = ......

Не выходит.Скажите,пожалуйста,как
через указатель на вектор обратиться к какоиу-либо
из элементов вектора.

Заранее благодарен
Styopa
Сообщения: 40
Зарегистрирован: 30 сен 2004, 19:22
Откуда: Севастополь
Контактная информация:

Я, может, и ошибаюсь, т.к. не знаю методов класса vector, но если у него есть операция [] , то в твоем случае это будет *pointer[number]
В жизни программиста всего три плюса. Из них два - в Си++, а третий - крест на его могиле.
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Не надо доступаться к вектору через указатель - нет гарантии, что это будет работать в общем случае. Надо пользоваться итераторами или операциями доступа, объявленными в самих контейнерах (типа []).
Вот пример, как надо и НЕ НАДО работать со станд.контейнером vector<int>:

Код: Выделить всё

vector<int> v;
int a[] = {1,1,2,3,5,8,13,21,0};
v.insert(v.end(), a, a+sizeof(a)/sizeof(int));
// 1. Стандартный доступ через итератор
vector<int>::iterator it = v.begin();
for (; it != v.end(); ++it)
  cout << *it << endl;
// 2. Доступ через указатель 
// ВНИМАНИЕ: непереносим (возможен в реализациях, где vector<T>::iterator эквивалентен T*)
int* pn = v.begin();
for (; *pn; ++pn)
  cout << *pn << endl;
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

std::vector гарантирует, что элементы всегда хранятся последовательно в памяти, так что всегда можно законно брать адрес нулевого элемента.

Код: Выделить всё

vector<int> v;
int a[] = {1,1,2,3,5,8,13,21,0};
v.insert(v.end(), a, a+sizeof(a)/sizeof(int)); 
int* ptr = &v[0];
2B OR NOT(2B) = FF
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

Absurd, спасибо. Ведь помнил, что можно, но запамятовал как ;)
Ответить