Pregunta

Tengo un vector de myObjects en alcance global.

std::vector<myObject>

Un método pasa un puntero a uno de los elementos en el vector. ¿Puede este método incrementar el puntero, para llegar al siguiente elemento,

myObject* pmObj;

++pmObj; // the next element ??

¿o debería pasarse un std :: Vector < myObject > :: iterator e incrementar eso en su lugar?

Suponga por ahora que el vector no se cambiará mientras tanto.

¿Fue útil?

Solución

Sí, el estándar garantiza en una corrección técnica que el almacenamiento de un vector es contiguo, por lo que el incremento de punteros en un vector funcionará.

Otros consejos

Sí, esto funcionará como se esperaba, ya que std :: vector tiene el mandato de utilizar almacenamiento contiguo por parte del Estándar. Sugeriría pasar un par de iteradores si está trabajando con un rango de objetos. Este es más o menos el idioma estándar empleado por el STL. Esto también hará que su código sea un poco más seguro, ya que tiene un punto final explícito para la iteración en lugar de depender de un conteo o algo así.

Si el vector no se reasigna y está seguro de no salirse de los límites del vector, puede utilizar este enfoque. Incrementar los punteros es legal y, si bien tiene espacio para moverse al siguiente elemento, puede hacerlo incrementando el puntero ya que el búfer del vector es un solo bloque de memoria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top