Использование указателя на объект, хранящийся в векторе… C ++
Вопрос
У меня есть вектор MyObjects в глобальном масштабе.
std::vector<myObject>
Метод передается указатель на один из элементов в векторе. Может ли этот метод увеличить указатель, чтобы добраться до следующего элемента,
myObject* pmObj;
++pmObj; // the next element ??
или должно быть передано std::Vector<myObject>::iterator
И увеличить это вместо этого?
Предположим, что вектор не будет изменен в то же время.
Решение
Да - стандартные гарантии в технической коррекции о том, что хранилище вектора является смежным, поэтому будет работать указатели на вектор.
Другие советы
Да, это будет работать так, как и ожидалось, с std::vector
обязан использовать смежное хранилище по стандарту. Я бы предложил пропустить пару итераторов, если вы работаете с различными объектами. Это в значительной степени стандартная идиома, используемая STL. Это сделает ваш код немного более безопасным, так как у вас есть явная конечная точка для итерации, а не полагаться на счет или что -то в этом роде.
Если вектор не перераспределен, и вы уверены, что вы не выйдете из границ вектора, тогда вы можете использовать этот подход. Увеличение указателей является законным, и, хотя у вас есть место, чтобы перейти к следующему элементу, вы можете сделать это, увеличивая указатель, так как буфер вектора представляет собой единый блок памяти.