Passando un vettore per riferimento in C ++

Passando un vettore per riferimento in C ++
Per capire cosa significa passare un vettore in riferimento a una funzione in C ++, è bene capire prima cosa sia un riferimento in generale.

Riferimento

Considera il seguente codice:

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

L'output è: z z

La prima dichiarazione nel codice inizia con la dichiarazione e l'assegnazione alla variabile char, var, il valore, 'y'. La seconda affermazione ha una seconda variabile chiamata Ref. È ancora di tipo, char. Tuttavia, qui, c'è il & Simbolo tra Char e la variabile, Ref. Non importa se e è più vicino a char o al riferimento.

Per ref viene assegnato la variabile, var. Cosa significa questo? A causa di e tra Char e Ref, Ref e Var diventano nomi alternativi per la stessa posizione di memoria che ha il personaggio, "Y". Ora, Ref o VAR possono essere utilizzati per modificare il valore nella posizione della memoria. Quando ciò accade, sia var che Ref restituirebbero lo stesso valore. Nel codice sopra, il ref è stato utilizzato per modificare il valore.

Nel seguente codice, il contenuto della stessa posizione di memoria, citata da var e ref, viene modificato tramite VAR:

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

L'uscita è la stessa: z z

Una variabile di riferimento è sinonimo di una variabile originale. La variabile originale stessa, è ancora un riferimento.

Può esserci più di un riferimento a una variabile originale, come mostra il seguente codice:

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

L'output è: z z z

Per avere un riferimento, assegnare una variabile originale a una nuova variabile; Nella dichiarazione della nuova variabile, hanno e tra il tipo e la nuova variabile.

Il vantaggio di utilizzare la variabile di riferimento è che esiste solo una copia del valore in memoria, per i diversi nomi delle variabili (sinonimi). Con la normale programmazione in C ++, se le diverse posizioni di memoria non sono necessarie e ogni variabile ha la propria posizione di memoria, con lo stesso valore, questo sarebbe uno spreco di memoria.

Vettore e riferimento

Il vettore è una classe da cui vengono creati gli oggetti vettoriali (istanziati). Per utilizzare la classe vettoriale, la libreria vettoriale deve essere inclusa nel programma. C'è la variabile dell'oggetto vettoriale originale. A questo, possono essere associate altre variabili di riferimento (sinonimo). Fare una variabile di riferimento vettoriale viene eseguita alla dichiarazione come con l'oggetto fondamentale di cui sopra (CHAR). Il seguente programma illustra questo:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

vettore VTR;
vettore & vtrref1 = vtr;
vettore & vtrref2 = vtr;
restituzione 0;

La libreria vettoriale è inclusa nel programma. È previsto un vettore di stringhe, quindi è inclusa anche la libreria di stringhe. Nota l'uso e la posizione di e nella seconda e terza dichiarazione vettoriale. Tutte e tre le variabili dell'oggetto vettoriale, VTR, VTRREF1 e VTRREF2 sono sinonimi o riferimenti alla stessa posizione di memoria.

VTRREF1 e VTRREF2 sono utilizzati in un programma allo stesso modo di VTR, senza precedere nessuno con &. In altre parole, VTR [5], VTRREF1 [5] e VTRREF2 [5] World restituiscono lo stesso valore situato nella stessa posizione di memoria.

Vantaggio dell'utilizzo di un vettore di riferimento

Il contenuto di un oggetto vettoriale può essere molto lungo. Di solito non è desiderabile avere più copie della stessa lista lunga in memoria. Di tanto in tanto, è desiderabile avere due riferimenti dello stesso vettore in memoria. Ciò è particolarmente utile quando si passa un vettore a una funzione. Se il vettore non viene approvato per riferimento (o puntatore), ci saranno due copie dello stesso vettore in memoria nel programma. Cioè, il corpo della funzione avrà una copia del vettore in memoria che è diversa dal vettore originale al di fuori del corpo della funzione. Un modo per evitare tali due copie ma avere ancora due variabili è passare per riferimento. In questo modo, la variabile nel corpo della funzione e la variabile al di fuori del corpo della funzione si riferirebbe entrambi allo stesso vettore.

Passando un vettore in riferimento a una funzione

È semplice passare un vettore in riferimento a una funzione. Per fare ciò, avere il vettore originale al di fuori della funzione; Lascia che il parametro della definizione della funzione sia la dichiarazione del vettore con ampie e (&), tra il tipo vettoriale e il nome del parametro. Il nome del parametro del vettore e il nome originale del vettore possono essere diversi. Il nome originale del vettore è l'argomento della chiamata di funzione. In questo modo, il nome vettoriale nel corpo della funzione e il nome vettoriale al di fuori del corpo della funzione, sono due nomi diversi che si riferiscono allo stesso vettore.

Immagina un vettore di nomi di animali. L'intestazione per il programma sarebbe:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;

Il vettore al di fuori della funzione può essere:

vettore animali = "tigre", "lupo", "leone", "giraffe", "orso";

La funzione di interesse può essere:

void fn (vettore & vtr)
per (int i = 0; icout << vtr[i] << ", ";
cout << endl;

A questo punto, il nome del vettore all'esterno della funzione è gli animali e il nome del vettore all'interno della funzione è VTR. Entrambi i nomi si riferiscono allo stesso oggetto vettoriale in memoria. Se qualsiasi elemento del vettore viene modificato all'interno della funzione, la modifica verrà visualizzata nella variabile vettoriale al di fuori della funzione. Se qualsiasi elemento del vettore viene modificato al di fuori della funzione, la modifica verrà visualizzata nella variabile vettoriale all'interno della funzione. Non è stata apportata alcuna modifica del genere in questo programma, tuttavia. La funzione visualizza semplicemente il contenuto vettoriale, che è lo stesso all'interno della funzione e all'esterno della funzione. Nota l'uso e la posizione del simbolo e nella dichiarazione dei parametri. La funzione principale C ++ può essere:

int main ()

fn (animali);
restituzione 0;

Il nome variabile del vettore esterno alla funzione è l'argomento della funzione di funzione. L'output è:

tigre, lupo, leone, giraffa, orso,

Nota: non appena la funzione inizia l'esecuzione, nella funzione viene effettuata la seguente istruzione:

vettore & vtr = animali;

Questa dichiarazione è molto simile a una dichiarazione di oggetti fondamentali sopra, che è:

char & ref = var;

Conclusione

Un nome normale e il nome di riferimento di un vettore sono entrambi sinonimi dello stesso vettore. Ciò significa che si riferiscono alla stessa posizione di memoria. Per passare un vettore a una funzione in riferimento, la dichiarazione dei parametri del vettore nelle parentesi della funzione deve avere e tra il tipo di vettore e il nome vettoriale. Questo nome tra parentesi è ufficialmente il nome di riferimento. Alla chiamata della funzione, il nome normale della variabile vettoriale originale al di fuori della definizione della funzione diventa l'argomento della funzione. I due nomi possono essere diversi. All'interno della definizione della funzione e non ha preceduto il nome vettoriale.