Использование указателя на объект, хранящийся в векторе ... c ++ - PullRequest
1 голос
/ 16 марта 2009

У меня есть вектор myObjects в глобальной области видимости.

std::vector<myObject>

В метод передается указатель на один из элементов вектора. Может ли этот метод увеличить указатель, чтобы перейти к следующему элементу,

myObject* pmObj;

++pmObj; // the next element ??

или ему нужно передать std::Vector<myObject>::iterator и увеличить вместо этого?

Предположим, что вектор пока не изменится.

Ответы [ 3 ]

6 голосов
/ 16 марта 2009

Да - стандарт в технической коррекции гарантирует, что память для вектора является смежной, поэтому будут работать приращения указателей на вектор.

3 голосов
/ 16 марта 2009

Да, это будет работать, как и ожидалось, поскольку std::vector согласно Стандарту обязано использовать непрерывное хранилище. Я бы предложил передать пару итераторов, если вы работаете с рядом объектов. Это в значительной степени стандартная идиома, применяемая STL. Это также сделает ваш код немного более безопасным, поскольку у вас есть явная конечная точка для итерации, а не счетчик или что-то в этом роде.

2 голосов
/ 16 марта 2009

Если вектор не перераспределен и вы уверены, что не выйдете за пределы вектора, то вы можете использовать этот подход. Инкрементные указатели допустимы, и, хотя у вас есть место для перехода к следующему элементу, вы можете сделать это, увеличив указатель, поскольку буфер вектора представляет собой один блок памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...