Question

J'ai un vecteur de myObjects dans la portée globale.

std::vector<myObject>

Un pointeur sur un des éléments du vecteur est transmis à une méthode. Cette méthode peut-elle incrémenter le pointeur pour accéder à l'élément suivant,

myObject* pmObj;

++pmObj; // the next element ??

ou doit-il recevoir un std :: Vector < myObject > :: iterator et l'incrémenter à la place?

Supposons pour l'instant que le vecteur ne sera pas modifié entre-temps.

Était-ce utile?

La solution

Oui - le standard garantit, dans une correction technique, que le stockage d'un vecteur est contigu, de sorte que l'incrémentation de pointeurs dans un vecteur fonctionnera.

Autres conseils

Oui, cela fonctionnera comme prévu puisque std :: vector est mandaté pour utiliser le stockage contigu par la norme. Je suggérerais de passer une paire d'itérateurs si vous travaillez avec une gamme d'objets. C’est à peu près le même langage que celui employé par la STL. Cela rendra également votre code un peu plus sûr, car vous avez un point de terminaison explicite pour l'itération au lieu de vous fier à un nombre ou à quelque chose comme ça.

Si le vecteur n'est pas réaffecté et que vous êtes sûr de ne pas sortir des limites du vecteur, vous pouvez utiliser cette approche. Incrémenter des pointeurs est légal. Vous pouvez le faire en incrémentant le pointeur dans la mesure où vous avez suffisamment d’espace pour passer à l’élément suivant, car la mémoire tampon du vecteur est un seul bloc de mémoire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top