Funzione che restituisce un vettore in C ++

Funzione che restituisce un vettore in C ++
Può una funzione restituire un vettore in c++? Il motivo per cui viene posta questa domanda è perché una funzione non può restituire un array (che è simile a un vettore) in C++. La risposta è semplice. Sì, una funzione può restituire un vettore in C ++ e in modi diversi. Questo articolo spiega i diversi modi in cui una funzione C ++ può restituire un vettore.

Al fine di codificare un vettore in C ++, la libreria vettoriale deve essere inclusa nel programma. La libreria vettoriale ha la classe vettoriale da cui gli oggetti vettoriali possono essere istanziati (creati).

Il programma in cui sono tutti i campioni di codice di questo articolo, inizia con:

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

Viene utilizzato un vettore di stringhe.

Contenuto dell'articolo

- Vettore di ritorno con il normale nome vettoriale

- Restituire un vettore letterale

- Restituzione di un riferimento vettoriale

- Restituire un puntatore vettoriale

- Conclusione

Vettore di ritorno con il normale nome vettoriale

Lascia che il vettore di interesse sia:

vettore negozio = "pane", "carne", "riso", "salsa di pomodoro", "formaggio";

Il vettore è un elenco di articoli in un piccolo negozio di alimentari. Il nome, archivio di questo vettore, deve essere inviato come argomento a una funzione, il cui parametro è un vettore, ma con il nome, VTR. La funzione di interesse può essere:

vettore fn (vettore vtr)
restituire VTR;

Notare il tipo di restituzione della definizione della funzione. Il nome del vettore è negozio. Questo è l'argomento per la chiamata della funzione. Il parametro per la funzione corrispondente al vettore è:

vettore VTR

Si noti che l'argomento per la funzione e il nome del parametro sono diversi (possono essere comunque gli stessi). Non appena la funzione inizia l'esecuzione, viene fatta la seguente dichiarazione:

vettore VTR = Store;

Questa affermazione è equivalente alle seguenti due dichiarazioni:

vettore negozio = "pane", "carne", "riso", "salsa di pomodoro", "formaggio";
vettore VTR = Store;

E così, VTR è una copia del vettore, archivia. A questo punto, ci sono due vettori con lo stesso contenuto in memoria per il programma. Una funzione principale C ++ appropriata per il codice può essere:

int main ()

vettore v = fn (negozio);
per (int i = 0; icout << v[i] << ", ";
cout << endl;
restituzione 0;

Si noti che il negozio di parole, è l'argomento della chiamata di funzione. Quando viene chiamata la funzione, due copie dello stesso contenuto vettoriale si verificano in memoria. La funzione (chiamata) restituisce un vettore, che viene ricevuto da un altro vettore, V. Al termine del programma, ci sono tre vettori della stessa copia in memoria. Queste tre copie dello stesso contenuto possono essere ridotte a una copia utilizzando un vettore di riferimento o un vettore di punta. L'output per il programma sopra è:

pane, carne, riso, salsa di pomodoro, formaggio,

Restituire un vettore letterale

Oggi (nel 2022), un letterale vettoriale è lo stesso di un array letterale. Questo letterale è chiamato inizialezer_list, oggi in C++. Quindi, restituire un letterale vettoriale per una funzione, è lo stesso del restituzione di un inizializer_list. Lascia che inizi InitLializer_List:

"pane", "carne", "riso", "salsa di pomodoro", "formaggio"

Lascia che la definizione della funzione restituisca l'inizializzatore,

vettore fn ()
restituire "pane", "carne", "riso", "salsa di pomodoro", "formaggio";

Initializer_List è composto sul punto nell'istruzione di ritorno e restituito. La definizione della funzione non ha un parametro, ma ha lo stesso tipo di ritorno della sua controparte nella sezione precedente. Lascia che la funzione C ++ principale sia:

int main ()

vettore v = fn ();
per (int i = 0; icout << v[i] << ", ";
cout << endl;
restituzione 0;

La chiamata della funzione, questa volta, non ha alcun argomento, ma il valore di restituzione è ricevuto dallo stesso vettore e dal tipo della sezione precedente.

Quando il programma sta completando, ci sarebbero due copie dello stesso vettore in memoria? NO. Ci sarebbe una sola copia, che è V. Initializer_List è una sorta di espressione, chiamata rvalue. Quando questo tipo di espressione non è più necessario in memoria, può essere cancellato da C ++ per avere più spazio di memoria? Non è importante se rimane in memoria dopo che è stato utilizzato mentre il programma continua a funzionare. Sarebbe cancellato se il suo spazio è necessario. L'output del programma è:

pane, carne, riso, salsa di pomodoro, formaggio,

Restituzione di un riferimento vettoriale

Il programma qui farà quello che ha fatto il primo programma sopra, ma solo con una copia dello stesso vettore. Tuttavia, ci saranno tre nomi diversi per lo stesso vettore. Lascia che il vettore di interesse sia:

vettore negozio = "pane", "carne", "riso", "salsa di pomodoro", "formaggio";
La variabile, archivia qui, è un nome normale. Lascia che la funzione di interesse sia:
vettore & fn (vettore & vtr)
restituire VTR;

Nota la presenza e la posizione di e nel parametro. Significa che VTR è un vettore di riferimento (sinonimo) e non una copia dell'argomento da inviare. Nota la presenza e la posizione di e nel tipo di ritorno. Significa che il riferimento (sinonimo) di un vettore verrà restituito dalla funzione. Si noti che l'istruzione interna, "return vtr;" non ha &. Lascia che la funzione principale C ++ sia:

int main ()

vettore *v = & fn (negozio);
per (int i = 0; imisurare(); I ++)
cout << (*v)[i] << ", ";
cout << endl;
restituzione 0;

La firma della definizione della funzione e dell'istruzione chiamata funzione sono:

vettore & fn (vettore & VTR)

E

vettore *v = & fn (negozio);

rispettivamente. Nota di nuovo, la presenza e la posizione di &, nel tipo di ritorno della definizione della funzione. Nota la presenza e la posizione di e nell'istruzione chiamata funzione. L'argomento della chiamata della funzione è il nome ordinario del vettore, archivia. La funzione restituisce un riferimento ed è ricevuta da un puntatore, V.

E quindi, ci sono tre diverse variabili nel programma, tutte riferendosi alla stessa posizione di memoria vettoriale (la funzione restituita e VTR, che è sinonimo di Store). L'output è:

pane, carne, riso, salsa di pomodoro, formaggio,

Restituire un puntatore vettoriale

Il programma qui farà quello che ha fatto il primo programma sopra, ma solo con una copia dello stesso vettore. Ci saranno tre nomi diversi per lo stesso vettore. Lascia che il vettore di interesse sia:

vettore negozio = "pane", "carne", "riso", "salsa di pomodoro", "formaggio";
La variabile, archivia qui, è un nome normale. Lascia che la funzione di interesse sia:
vettore * fn (vettore *vtr)
restituire VTR;

Nota la presenza e la posizione di * nel parametro. Significa che VTR è un vettore del puntatore e non una copia di qualsiasi argomento vettoriale da inviare. Nota la presenza e la posizione di * nel tipo di ritorno. Ancora una volta, si noti che l'affermazione interna, "return vtr;" non ha & o *. Lascia che la funzione principale C ++ sia:

int main ()

vettore *v = fn (& store);
per (int i = 0; imisurare(); I ++)
cout << (*v)[i] << ", ";
cout << endl;
restituzione 0;

La firma della definizione della funzione e dell'istruzione chiamata funzione sono:

vettore * fn (vettore *VTR)

E

vettore *v = fn (& store);

rispettivamente. Nota la presenza e la posizione di * nel tipo di ritorno della definizione della funzione. Nota la presenza e la posizione di e nell'istruzione chiamata funzione; È di fronte all'argomento, al negozio e non di fronte a Fn (), che non ha & o *. La funzione restituisce un riferimento ed è ricevuta da un puntatore, V.

E così, ci sono tre diverse variabili nel programma, tutte riferendosi alla stessa posizione di memoria vettoriale. L'output è:

pane, carne, riso, salsa di pomodoro, formaggio,

Conclusione

Una funzione può restituire un vettore con il suo nome normale. Una funzione può restituire un vettore letterale (inizializer_list), che deve essere ricevuto da un vettore normale (nome). Un vettore può restituire un riferimento vettoriale, che sarà ricevuto da un puntatore vettoriale. Un vettore può restituire un puntatore vettoriale, ancora da ricevere da un altro puntatore vettoriale.