Vector<Point> ou vector<Point*>, lequel est mieux?
feraudyh
Messages postés
70
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
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.
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:
- Vector<Point> ou vector<Point*>, lequel est mieux?
- Point de suite word - Guide
- Point de restauration - Guide
- Point gps - Guide
- Comment inserer une video dans un power point - Guide
- Point d'exclamation à l'envers ✓ - Forum Matériel & Système
1 réponse
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à
Est-ce que tu veux faire un tableau qui référence des points ? à ce moment là
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 :
Tu lui dit d'ajouter un point ayant des caractéristiques particulière. etc.
à toi de savoir ce que tu veux faire.
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.