Einen Vektor durch Bezugnahme in C ++ übergeben

Einen Vektor durch Bezugnahme in C ++ übergeben
Um zu verstehen, was es bedeutet, einen Vektor durch Bezugnahme auf eine Funktion in C ++ zu übergeben, ist es gut zu verstehen, was eine Referenz im Allgemeinen ist.

Referenz

Betrachten Sie den folgenden Code:

char var = 'y';
char & ref = var;
Ref = 'Z';
Cout << var << " << ref << endl;

Die Ausgabe ist: z z

Die erste Aussage im Code beginnt mit der Deklaration und Zuweisung an die char -Variable var, den Wert, "y". Die zweite Anweisung hat eine zweite Variable namens Ref. Es ist immer noch vom Typ, Char. Hier gibt es jedoch das & Symbol zwischen CHAR und der Variablen, Ref. Es spielt keine Rolle, ob und näher an char oder um Ref ist.

Zu Ref wird die Variable zugewiesen, var. Was bedeutet das? Wegen & zwischen Char und Ref werden Ref und Var zu alternativen Namen für denselben Speicherort, der den Charakter "Y" hat. Jetzt kann entweder Ref oder Var verwendet werden, um den Wert im Speicherort zu ändern. In diesem Fall würden sowohl Var als auch Ref den gleichen Wert zurückgeben. Im obigen Code wurde Ref verwendet, um den Wert zu ändern.

Im folgenden Code wird der Inhalt desselben Speicherorts, auf den Var und Ref verwiesen wird, durch VAR geändert:

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

Die Ausgabe ist der gleiche: z z

Eine Referenzvariable ist ein Synonym für eine Originalvariable. Die ursprüngliche Variable selbst ist immer noch eine Referenz.

Es kann mehr als einen Verweis auf eine ursprüngliche Variable geben, wie der folgende Code zeigt:

char var = 'y';
char & ref1 = var;
char & ref2 = var;
ref2 = 'z';
Cout << var << " << ref1 << " << ref2 << endl;

Die Ausgabe ist: Z z z

Um eine Referenz zu haben, weisen Sie einer neuen Variablen eine ursprüngliche Variable zu. in der Erklärung der neuen Variablen, haben und zwischen dem Typ und der neuen Variablen.

Der Vorteil der Verwendung von Referenzvariablen besteht darin, dass es für die verschiedenen Variablennamen (Synonyme) nur eine Kopie des Wertes im Speicher gibt, für die verschiedenen Variablennamen (Synonyme). Wenn die normale Programmierung in C ++, wenn die verschiedenen Speicherorte nicht benötigt werden und jede Variable ihren eigenen Speicherort mit demselben Wert hat, wäre dies Speicherverschwendung.

Vektor und Referenz

Vektor ist eine Klasse, aus der Vektorobjekte erstellt werden (instanziiert). Um die Vektorklasse zu verwenden, muss die Vektorbibliothek in das Programm aufgenommen werden. Es gibt die ursprüngliche Vektorobjektvariable. Dazu kann andere Referenzvariablen (Synonym) zugeordnet werden. Eine Vektor -Referenzvariable erzeugen, erfolgt bei der Erklärung wie beim obigen grundlegenden Objekt (char). Das folgende Programm zeigt dies:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Vektor vtr;
Vektor & vtrref1 = vtr;
Vektor & vtrref2 = vtr;
Rückkehr 0;

Die Vektorbibliothek ist in das Programm aufgenommen. Ein Saitenvektor ist beabsichtigt, daher ist auch die String -Bibliothek enthalten. Beachten Sie die Verwendung und Position von & im zweiten und dritten Vektorerklärungen. Alle drei Vektorobjektvariablen VTR, VTRREF1 und VTRREF2 sind Synonyme oder Verweise auf denselben Speicherort.

vtrref1 und vtrref2 werden in einem Programm genauso verwendet wie VTR, ohne dass sie mit & &. Mit anderen Worten, VTR [5], VTRREF1 [5] und VTRREF2 [5] World geben denselben Wert am selben Speicherort zurück.

Vorteil der Verwendung eines Referenzvektors

Der Inhalt eines Vektorobjekts kann sehr lang sein. Es ist normalerweise nicht wünschenswert, mehrere Kopien derselben langen Liste im Speicher zu haben. Von Zeit zu Zeit ist es wünschenswert, zwei Referenzen desselben Vektors im Gedächtnis zu haben. Dies ist besonders nützlich, wenn Sie einen Vektor an eine Funktion weitergeben. Wenn der Vektor nicht mit Bezug. Das heißt, der Funktionskörper hat eine Kopie des Vektors im Speicher, der sich vom ursprünglichen Vektor außerhalb der Funktionskörper unterscheidet. Eine Möglichkeit, solche zwei Kopien zu vermeiden, aber immer noch zwei Variablen zu haben, besteht darin, für Referenz zu bestehen. Auf diese Weise würde sich die Variable im Funktionskörper und die Variable außerhalb des Funktionskörpers auf denselben Vektor beziehen.

Übergeben eines Vektors durch Bezugnahme auf eine Funktion

Es ist einfach, einen Vektor durch Bezugnahme auf eine Funktion zu übergeben. Lassen Sie dazu den ursprünglichen Vektor außerhalb der Funktion haben; Lassen Sie den Parameter der Funktionsdefinition die Deklaration des Vektors mit den Verstärkern und (&) zwischen dem Vektortyp und dem Parameternamen sein. Der Parametername des Vektors und der ursprüngliche Name des Vektors können unterschiedlich sein. Der ursprüngliche Name des Vektors ist das Argument des Funktionsaufrufs. Auf diese Weise sind der Vektorame in der Funktionskörper und der Vektorame außerhalb des Funktionsorganisation zwei verschiedene Namen, die sich auf denselben Vektor beziehen.

Stellen Sie sich einen Vektor von Tiernamen vor. Die Überschrift für das Programm wäre:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;

Der Vektor außerhalb der Funktion kann sein:

Vektor Tiere = "Tiger", "Wolf", "Lion", "Giraffe", "Bear";

Die Funktion des Interesses kann sein:

Leere FN (Vektor & vtr)
für (int i = 0; iCout << vtr[i] << ", ";
Cout << endl;

Zu diesem Zeitpunkt ist der Name des Vektors außerhalb der Funktion Tiere, und der Name des Vektors innerhalb der Funktion ist VTR. Beide Namen beziehen sich auf dasselbe Vektorobjekt im Speicher. Wenn in der Funktion ein Element des Vektors geändert wird, wird die Änderung in der Vektorvariablen außerhalb der Funktion angezeigt. Wenn ein Element des Vektors außerhalb der Funktion geändert wird, wird die Änderung in der Vektorvariablen innerhalb der Funktion angezeigt. In diesem Programm wurde jedoch keine solche Änderung vorgenommen. Die Funktion zeigt einfach nur den Vektorinhalt an, der innerhalb der Funktion und außerhalb der Funktion gleich ist. Beachten Sie die Verwendung und Position des Symbols und in der Parameterdeklaration. Die C ++ - Hauptfunktion kann sein:

int main ()

Fn (Tiere);
Rückkehr 0;

Der variable Name des Vektors außerhalb der Funktion ist das Argument des Funktionsaufrufs. Die Ausgabe ist:

Tiger, Wolf, Löwe, Giraffe, Bär,

Hinweis: Sobald die Funktion mit der Ausführung beginnt, wird die folgende Anweisung in der Funktion ergeben:

Vektor & vtr = Tiere;

Diese Erklärung ist einer obigen grundlegenden Objekterklärung sehr ähnlich, nämlich:

char & ref = var;

Abschluss

Ein normaler Name und der referenzierte Name eines Vektors sind beide Synonyme desselben Vektors. Dies bedeutet, dass sie sich auf denselben Speicherort beziehen. Um einen Vektor an eine Funktion zu übergeben, muss die Parameterdeklaration des Vektors in den Klammern der Funktion und zwischen dem Vektortyp und dem Vektoramen haben. Dieser Name in den Klammern ist offiziell der referenzierte Name. Beim Funktionsaufruf wird der normale Name der ursprünglichen Vektorvariablen außerhalb der Funktionsdefinition zum Argument der Funktion. Die beiden Namen können unterschiedlich sein. Innerhalb der Funktionsdefinition und ist dem Vektoramen nicht vorausgegangen.