Страница 1 из 1

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

Добавлено: 22 янв 2006, 22:36
programius
создал указатель на вектор:

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

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

 

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

Пробовал:

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

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

Заранее благодарен

Добавлено: 23 янв 2006, 00:36
Styopa
Я, может, и ошибаюсь, т.к. не знаю методов класса vector, но если у него есть операция [] , то в твоем случае это будет *pointer[number]

Добавлено: 23 янв 2006, 12:45
Eugie
Не надо доступаться к вектору через указатель - нет гарантии, что это будет работать в общем случае. Надо пользоваться итераторами или операциями доступа, объявленными в самих контейнерах (типа []).
Вот пример, как надо и НЕ НАДО работать со станд.контейнером 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;

Добавлено: 30 янв 2006, 15:20
Absurd
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];

Добавлено: 30 янв 2006, 16:52
Eugie
Absurd, спасибо. Ведь помнил, что можно, но запамятовал как ;)