Passage des vecteurs par référence

Si j'ai un vecteur d'objets dans une classe que je veux changer dans une autre, j'essaierais de passer toutes les informations par référence.

Que dois-je exactement passer par référence? Le vecteur? Les objets? Les deux?

Essentiellement ce que je demande est: Quelle est la différence entre ceux-ci?

vector&<object> blah; // A reference to a vector of objects?

vector<object&> blah; // A vector of references to objects?

vector&<object&> blah; // A reference to a vector of references to objects???

Je ne suis pas vraiment sûr du fonctionnement du référencement des conteneurs de type tableau. Ces juridique?

22
demandé sur Peter Mortensen 2011-11-01 16:13:33

3 réponses

vector&<object> est une erreur de syntaxe. {[1] } n'est pas valide, car le type de valeur d'un vecteur doit être assignable. vector&<object&> blah est une erreur de syntaxe.

Une référence à un vecteur est vector<T>&.

46
répondu Cat Plus Plus 2015-09-05 12:50:56

Vous ne pouvez pas avoir de vecteur de références. Les éléments vectoriels doivent être copiables et assignables, ce qui n'est pas le cas des références. Donc, seule la première option est en fait une option, mais elle est orthographiée std::vector<Object> &.

Notez que v[1] renvoie déjà une référence au deuxième élément, vous pouvez donc passer des éléments individuels par référence.

Il est possible d'avoir un vecteur de référence-wrappers de la std::ref, mais si vous ne savez pas ce que c'est, vous ne devriez probablement pas l'utiliser à de ce point.

4
répondu Kerrek SB 2011-11-01 12:17:59

Une autre option consiste à passer autour de itérateurs au lieu de conteneurs. C'est l'approche que la bibliothèque standard prend dans <algorithm>. Ils sont légèrement plus verbeux sur le site appelant, mais ils ont l'avantage de travailler pour des parties d'une collection ainsi que des collections complètes et de découpler l'algorithme du conteneur.

Enfin, bien sûr, cela vaut la peine de vérifier que vous connaissez vos algorithmes car il y en a peut-être déjà un qui fait ce que vous vouloir.

2
répondu jk. 2017-12-15 20:31:13