Passer un vecteur par référence en C ++

Passer un vecteur par référence en C ++
Afin de comprendre ce que signifie passer un vecteur par référence à une fonction en C ++, il est bon de comprendre d'abord ce qu'est une référence en général.

Référence

Considérez le code suivant:

char var = 'y';
char & ref = var;
ref = 'z';
couter << var << " << ref << endl;

La sortie est: z z

La première instruction du code commence par la déclaration et l'attribution à la variable char, var, la valeur, «y». La deuxième instruction a une deuxième variable appelée ref. Il est toujours de type, char. Cependant, ici, il y a le & symbole entre char et la variable, ref. Peu importe si et est plus proche de Char ou de Ref.

To ref est attribué la variable, var. Qu'est-ce que cela signifie? En raison de et entre char et ref, ref et var deviennent des noms alternatifs pour le même emplacement de mémoire qui a le caractère, «y». Maintenant, REF ou VAR peut être utilisé pour modifier la valeur dans l'emplacement de la mémoire. Lorsque cela se produit, Var et Ref renvoyaient la même valeur. Dans le code ci-dessus, Ref a été utilisé pour modifier la valeur.

Dans le code suivant, le contenu du même emplacement de mémoire, mentionné par VAR et REF, est modifié via VAR:

char var = 'y';
char & ref = var;
var = 'z';
couter << var << " << ref << endl;

La sortie est la même: z z

Une variable de référence est un synonyme d'une variable d'origine. La variable d'origine elle-même, est toujours une référence.

Il peut y avoir plus d'une référence à une variable d'origine, car le code suivant le montre:

char var = 'y';
char & Ref1 = var;
char & Ref2 = var;
Ref2 = 'z';
couter << var << " << ref1 << " << ref2 << endl;

La sortie est: z z z

Pour avoir une référence, affectez une variable d'origine à une nouvelle variable; Dans la déclaration de la nouvelle variable, ont et entre le type et la nouvelle variable.

L'avantage de l'utilisation de la variable de référence est qu'il n'y a qu'une seule copie de la valeur en mémoire, pour les différents noms de variables (synonymes). Avec une programmation normale en C ++, si les différents emplacements de mémoire ne sont pas nécessaires, et chaque variable a son propre emplacement de mémoire, avec la même valeur, ce serait un gaspillage de mémoire.

Vecteur et référence

Le vecteur est une classe à partir de laquelle les objets vectoriels sont créés (instanciés). Pour utiliser la classe vectorielle, la bibliothèque vectorielle doit être incluse dans le programme. Il y a la variable d'objet vectoriel d'origine. À cela, d'autres variables de référence (synonyme) peuvent être associées. La fabrication d'une variable de référence vectorielle est effectuée à la déclaration comme avec l'objet fondamental ci-dessus (char). Le programme suivant illustre ceci:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()

vecteur Vtr;
vecteur & vtrref1 = vtr;
vecteur & vtrref2 = vtr;
retour 0;

La bibliothèque vectorielle est incluse dans le programme. Un vecteur de chaînes est prévu, de sorte que la bibliothèque de chaînes est également incluse. Notez l'utilisation et la position de & dans les deuxième et troisième déclarations de vecteur. Les trois variables d'objet vectorielles, VTR, VTRREF1 et VTRREF2 sont des synonymes ou des références au même emplacement de mémoire.

Vtrref1 et Vtrref2 sont utilisés dans un programme de la même manière que VTR, sans précéder. En d'autres termes, VTR [5], VTRREF1 [5] et Vtrref2 [5] Renvoie la même valeur située dans le même emplacement de mémoire.

Avantage de l'utilisation d'un vecteur de référence

Le contenu d'un objet vectoriel peut être très long. Il n'est généralement pas souhaitable d'avoir plusieurs copies de la même longue liste en mémoire. De temps en temps, il est souhaitable d'avoir deux références du même vecteur en mémoire. Ceci est particulièrement utile lors du passage d'un vecteur à une fonction. Si le vecteur n'est pas passé par référence (ou pointeur), il y aura deux copies du même vecteur en mémoire dans le programme. C'est-à-dire que le corps de fonction aura une copie du vecteur en mémoire qui est différente du vecteur d'origine en dehors du corps de fonction. Une façon d'éviter ces deux copies mais a toujours deux variables, c'est passer par référence. De cette façon, la variable dans le corps de fonction, et la variable en dehors du corps de fonction référerait tous deux au même vecteur.

Passer un vecteur par référence à une fonction

Il est simple de passer un vecteur par référence à une fonction. Pour ce faire, avoir le vecteur d'origine en dehors de la fonction; Soit le paramètre de la définition de la fonction la déclaration du vecteur avec les ampères et (&), entre le type de vecteur et le nom du paramètre. Le nom du paramètre du vecteur et le nom d'origine du vecteur peuvent être différents. Le nom d'origine du vecteur est l'argument de l'appel de la fonction. De cette façon, le nom du vecteur dans le corps de la fonction et le nom du vecteur en dehors du corps de fonction sont deux noms différents faisant référence au même vecteur.

Imaginez un vecteur de noms d'animaux. La tête du programme serait:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;

Le vecteur en dehors de la fonction peut être:

vecteur Animaux = "Tiger", "Wolf", "Lion", "Giraffe", "Bear";

La fonction d'intérêt peut être:

vide fn (vecteur & vtr)
pour (int i = 0; icouter << vtr[i] << ", ";
couter << endl;

À ce stade, le nom du vecteur en dehors de la fonction est les animaux, et le nom du vecteur à l'intérieur de la fonction est Vtr. Les deux noms se réfèrent au même objet vectoriel en mémoire. Si un élément du vecteur est modifié à l'intérieur de la fonction, le changement sera vu dans la variable de vecteur en dehors de la fonction. Si un élément du vecteur est modifié en dehors de la fonction, le changement sera vu dans la variable vectorielle à l'intérieur de la fonction. Aucun changement de ce type n'a été fait dans ce programme, cependant. La fonction affiche simplement le contenu vectoriel, qui est le même à l'intérieur de la fonction et en dehors de la fonction. Notez l'utilisation et la position du symbole, et dans la déclaration de paramètre. La fonction principale C ++ peut être:

int main()

fn (animaux);
retour 0;

Le nom de variable du vecteur en dehors de la fonction est l'argument de l'appel de fonction. La sortie est:

Tiger, loup, lion, girafe, ours,

Remarque: Dès que la fonction commence à s'exécuter, l'instruction suivante est faite dans la fonction:

vecteur & vtr = animaux;

Cette déclaration est très similaire à une déclaration d'objet fondamentale ci-dessus, qui est:

char & ref = var;

Conclusion

Un nom normal et le nom référencé d'un vecteur sont tous deux synonymes du même vecteur. Cela signifie qu'ils se réfèrent au même emplacement de mémoire. Pour passer un vecteur à une fonction par référence, la déclaration de paramètre du vecteur entre parenthèses de la fonction doit avoir et entre le type de vecteur et le nom du vecteur. Ce nom dans les parenthèses est officiellement le nom référencé. À l'appel de fonction, le nom normal de la variable vectorielle d'origine en dehors de la définition de la fonction devient l'argument de la fonction. Les deux noms peuvent être différents. Dans la définition de la fonction, et n'a pas précédé le nom du vecteur.