Utilisation d'un pointeur sur un objet stocké dans un vecteur & # 8230; c ++
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.
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.