Vector<Point> ou vector<Point*>, lequel est mieux?

Fermé
feraudyh Messages postés 70 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 3 mars 2023 - Modifié par feraudyh le 16/09/2014 à 20:32
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 17 sept. 2014 à 11:57
Bonjour,

Voici une question de style. Je veux traiter un tableau de points. Chaque point est essentiellement 3 valeurs doubles x,y,z encapsulées dans une classe Point.
Si je définis mon tableau comme
vector<Point>tableauPoints1;
alors j'ai, me semble til l'avantage que j'ai becaups moins d'allocations à faire que si je définit comme
vector<Point *>tableauPoint2;
mais alors pour acceder à un point particulier, à la position n avec la premiere approche
je peux faire
Point lePoint = tableauPoints[n];
seulement cela ne me parait pas très efficace, car il y a copie de chaque champ x,y,z de tableauPoints[n], n'est pas?
Et tableauPoint1.push_back(unPoint) ca fait de la copie aussi, n'est ce pas?

Autre approche; je définis
Point *ptrLePoint = &(tableauPoint1[1]);
Cette écriture (le "&") me paraît lourde, mais au moins il n'y a qu'une copie d'un pointeur.
L'utilisation de tableauPoints2 est plus facile quand il s'agit d'acceder au pointeur sur le nieme point.
Je vois un avantage concernant le tableau de pointeurs; c'est que si jamais les pointeurs était allouées ailleurs on pourrait partager ces pointeurs, et eviter la recopie d'information.

Je finis par me demander, si les deux choix sont valables, et c'est le contexte qui déterminera, surtout cette histoire de partage d'information que le tableau de pointeurs permet.

Question hasardeuse: est ce que ca a un sens de marquer comme ceci
vector<Point &>tableauPoint3;
?
Dans ce cas Point &p = tableauPoint3[n]
devrait etre efficace, mais je ne suis pas sur que je suis en train de raconter n'importe quoi.

Merci d'avoir eu la patience de lire mes interrogations.


A voir également:

1 réponse

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
17 sept. 2014 à 11:57
Salut.
tout dépend de ce que tu veux faire, manipuler et comment tu représentes tes variables.
Est-ce que tu veux faire un tableau de point ? à ce moment là
vector<Point>
est bien.
Est-ce que tu veux faire un tableau qui référence des points ? à ce moment là
vector<Point*>
est mieux.
La question est de savoir si tes points vivent leur vie en dehors du tableau.
Je pense que ta question est plus fondamentale que ce que tu penses. Il faut savoir ce que tu veux et comment l'écrire.
Tu veux ajouter un point à ton tableau, il faut faire :
tableau.push_back(Point(x,y,z));

Tu lui dit d'ajouter un point ayant des caractéristiques particulière. etc.
à toi de savoir ce que tu veux faire.
1