Meilleure méthode pour utiliser un vecteur dans une fonction - C++ - Programmation
Marsh Posté le 07-06-2003 à 18:51:44
Et ce type de déclaration, il faut le faire pour tous les types?
Ex: void Fonction (const int & Valeur) { toto = Valeur; }
Ou bien on la limite seulement aux conteneurs (le terme est juste?) tels que vector, tableaux??
Marsh Posté le 07-06-2003 à 21:02:12
Les vecteurs ne sont pas passés par défaut par référence?
Marsh Posté le 10-06-2003 à 15:31:51
Belgique a écrit : Les vecteurs ne sont pas passés par défaut par référence? |
Si logiquement Vect1 correspont à l'adresse du premier element du vecteur, donc ca revient au même dans ce cas la. Enfin je pense quand même que (const &Vect1) est plus clair et en plus ca permet de s'y habituer pour la suite avec les classes et les structures.
Marsh Posté le 10-06-2003 à 15:58:14
piemur2000 a écrit : |
Le probleme, c'est que tu n'en sais rien si "Vect1 correspont à l'adresse du premier element du vecteur". On ne parle pas de tableau mais de vecteur, et plus généralement de conteneur, ce qui n'a rien à voir.
En général, le constructeur par recopie d'un container de la STL ne copie pas tous les objets qu'il contient, mais modifie juste un compteur de références. Une copie sera réellement réalisée seulement si la copie est modifiée.
Marsh Posté le 10-06-2003 à 16:28:57
sowhatin22 a écrit : |
Toutefois je pense que c plusqu'une adresse qui passe alors par la pile donc mieux vaut passer une référence.
Marsh Posté le 10-06-2003 à 19:51:58
sowhatin22 a écrit : |
Euh non, je crois pas ( /usr/include/c++/3.3/bits/stl_vector ) :
Code :
|
Les mécanismes de la stl restent très très basiques, pas de copy-on-write et autres.
Marsh Posté le 11-06-2003 à 08:01:46
Captain ad-hoc a écrit : |
Autant pour moi, ce méchanisme n'est utilisé que pour les string mais pas pour les autres conteneurs.
Marsh Posté le 11-06-2003 à 09:14:43
Citation : Les vecteurs ne sont pas passés par défaut par référence? |
Citation : C'est fort possible ... Je n'en sais rien, mais je parlais de généralités, d'où ma précision structures / classes, qui, elles, sont dupliquées. |
Pourquoi (et comment ?) un vecteur (ou autre ?) serait passé par défaut par référence ?
J'ai toujours vu que le C++ comme le C passe par valeur, sauf si passage par référence explicité en C++ avec &.
Passage par valeur => recopie du vector ... ou alors j'ai loupé un truc (optimisation de certains compilos ?).
Marsh Posté le 11-06-2003 à 09:21:42
HelloWorld a écrit :
|
Tu pourais avoir un mécanisme de lazy recopy par exemple. Maintenent comem je suis jamais aller voir dans le code (et j'en ai pas envie avec la STL) je suppose que c pas le cas et je passe par référence.
Marsh Posté le 11-06-2003 à 12:48:53
Certes, mais on parle du passage de paramètres, et pas du code du vecteur. Et étant donné que c'est la STL, même si certaines implémentations utilisent le COW, rien ne garanti (à ma connaissance) un passage "par référence".
Marsh Posté le 11-06-2003 à 13:04:55
HelloWorld a écrit : Certes, mais on parle du passage de paramètres, et pas du code du vecteur. Et étant donné que c'est la STL, même si certaines implémentations utilisent le COW, rien ne garanti (à ma connaissance) un passage "par référence". |
tout à fait d'accord.
Marsh Posté le 07-06-2003 à 17:25:42
Le sujet est pas très clair je pense, alors je précise:
Donc j'ai un vecteur que j'ai rempli... Appellons le Vect1.
Je le fais passer dans une fonction, qui se sert de ses éléments pour effectuer un autre traitement...
Dans cette fonction, il est juste lu, et en aucun cas modifié.
Comment le déclarer correctement dans la déclaration de fonction:
void Fonction(Vect1);
ou bien void Fonction(const & Vect1);
ou autre chose, si vous qui me dites...
Parce ce que j'ai lu quelque part que la 2ème méthode est meilleure dans le sens où elle ne crée pas de copie du vecteur pour travailler...
Merci!!
---------------
Another .Net Blog