Использование указателя на объект, хранящийся в векторе… C ++

StackOverflow https://stackoverflow.com/questions/650232

Вопрос

У меня есть вектор MyObjects в глобальном масштабе.

std::vector<myObject>

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

myObject* pmObj;

++pmObj; // the next element ??

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

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

Это было полезно?

Решение

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top