Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2318 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Meilleure méthode pour utiliser un vecteur dans une fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Meilleure méthode pour utiliser un vecteur dans une fonction

n°420614
haazheel
Posté le 07-06-2003 à 17:25:42  profilanswer
 

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
mood
Publicité
Posté le 07-06-2003 à 17:25:42  profilanswer
 

n°420622
Konar
Posté le 07-06-2003 à 17:51:01  profilanswer
 

const &
c'est toujours mieux.

n°420623
haazheel
Posté le 07-06-2003 à 17:55:33  profilanswer
 

ok, merci...


---------------
Another .Net Blog
n°420635
haazheel
Posté le 07-06-2003 à 18:51:44  profilanswer
 

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??


---------------
Another .Net Blog
n°420674
theshockwa​ve
I work at a firm named Koslow
Posté le 07-06-2003 à 20:50:28  profilanswer
 

Non, ce n'est pas nécessaire ...
 
L'un des intérêts de passer par des références est d'éviter de coller des structures/classes dans la pile, ce qui la saturerait trop vite ... On ne passe donc qu'un pointeur sur la structure ...


---------------
last.fm
n°420676
belgique
Posté le 07-06-2003 à 21:02:12  profilanswer
 

Les vecteurs ne sont pas passés par défaut par référence?

n°420713
theshockwa​ve
I work at a firm named Koslow
Posté le 07-06-2003 à 22:37:45  profilanswer
 

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.


---------------
last.fm
n°422724
Piemur2000
Posté le 10-06-2003 à 15:31:51  profilanswer
 

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.

n°422809
SoWhatIn22
Posté le 10-06-2003 à 15:58:14  profilanswer
 

piemur2000 a écrit :


 
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.


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.


Message édité par SoWhatIn22 le 10-06-2003 à 15:59:11
n°422894
LetoII
Le dormeur doit se réveiller
Posté le 10-06-2003 à 16:28:57  profilanswer
 

sowhatin22 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.


 
Toutefois je pense que c plusqu'une adresse qui passe alors par la pile donc mieux vaut passer une référence.


---------------
Le Tyran
mood
Publicité
Posté le 10-06-2003 à 16:28:57  profilanswer
 

n°423120
Captain ad​-hoc
miam les bon batonnets de tux
Posté le 10-06-2003 à 19:51:58  profilanswer
 

sowhatin22 a écrit :


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.


 
 
Euh non, je crois pas ( /usr/include/c++/3.3/bits/stl_vector ) :  

Code :
  1. /**
  2.        *  @brief  %Vector copy constructor.
  3.        *  @param  x  A %vector of identical element and allocator types.
  4.        *  
  5.        *  The newly-created %vector uses a copy of the allocation
  6.        *  object used by @a x.  All the elements of @a x are copied,
  7.        *  but any extra memory in
  8.        *  @a x (for fast expansion) will not be copied.
  9.        */
  10.       vector(const vector& __x)
  11.       : _Base(__x.size(), __x.get_allocator())
  12.       { _M_finish = uninitialized_copy(__x.begin(), __x.end(), _M_start); }

 
 
Les mécanismes de la stl restent très très basiques, pas de copy-on-write et autres.

n°423390
SoWhatIn22
Posté le 11-06-2003 à 08:01:46  profilanswer
 

Captain ad-hoc a écrit :


Les mécanismes de la stl restent très très basiques, pas de copy-on-write et autres.


Autant pour moi, ce méchanisme n'est utilisé que pour les string mais pas pour les autres conteneurs.

n°423441
HelloWorld
Salut tout le monde!
Posté le 11-06-2003 à 09:14:43  profilanswer
 

Citation :

Les vecteurs ne sont pas passés par défaut par référence?  
theShOcKwAvE  


 

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 ?).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°423455
LetoII
Le dormeur doit se réveiller
Posté le 11-06-2003 à 09:21:42  profilanswer
 

HelloWorld a écrit :

Citation :

Les vecteurs ne sont pas passés par défaut par référence?  
theShOcKwAvE  


 

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 ?).


 
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.


---------------
Le Tyran
n°423698
HelloWorld
Salut tout le monde!
Posté le 11-06-2003 à 12:48:53  profilanswer
 

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".


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°423719
LetoII
Le dormeur doit se réveiller
Posté le 11-06-2003 à 13:04:55  profilanswer
 

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".


 
 :jap: tout à fait d'accord.


---------------
Le Tyran

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Meilleure méthode pour utiliser un vecteur dans une fonction

 

Sujets relatifs
Vecteur à éléments connu à l'avance: resize ou push_back?appel de fonction/de l'aide pour un touriste
Utiliser un Canvas pour dessiner dedant, et générer une ImageFonction qui retourne un char*
Fonction équivalent à fgetcsv() de PHP ?question de newbie sur les pointeur de fonction
[VBA Excel] Quand un une proprièté ou une méthode peut échouer?problème de variables dans fonction PHP
méthode.. panier de boutique en ligne[PHP] fonction strstr . Quelqu'un peut m'éclairer ?
Plus de sujets relatifs à : Meilleure méthode pour utiliser un vecteur dans une fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR