Come copiare un array in C ++

Come copiare un array in C ++
In C ++ un array può essere copiato manualmente (a mano) o utilizzando la funzione std :: copia (), dalla libreria di algoritmo C ++. Nella programmazione del computer, c'è una copia superficiale e c'è una copia profonda. La copia superficiale è quando due nomi di array diversi (vecchi e nuovi), si riferiscono allo stesso contenuto. La copia profonda è quando i due nomi di array diversi si riferiscono a due contenuti indipendenti ma stessi, in memoria. Questo articolo si occupa di copia profonda.

Considera il seguente array:

char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';

Questa è una serie di dieci caratteri dalle lettere, "F" a "O". Il nome di questo array è arr1. Considera il seguente array:

char arr2 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';

Il nome di questo array è arr2. Si noti che entrambi i contenuti sono gli stessi. ARR2 sarebbe una copia profonda di ARR1 se entrambi i inizializer_list si trovano in diverse regioni nella memoria del computer. Questo articolo spiega, copia manuale profonda dell'array e copia automatica profonda dell'array, in C++.

Contenuto dell'articolo

- Copia profonda manuale dell'array

- Copia profonda automatica dell'array

- Conclusione

Copia profonda manuale dell'array

Con questo approccio, vengono creati due array della stessa dimensione. Il primo ha contenuti mentre il secondo non ha contenuti. Il contenuto del primo viene copiato nel secondo utilizzando il per loop. Il seguente programma illustra questo:

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

#define size 10
char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';
char arr2 [dimensione];
per (int i = 0; iarr2 [i] = arr1 [i];
restituzione 0;

La prima riga del programma include l'intestazione C ++ iostream (libreria) per l'input e l'output. Questa prima riga è una direttiva. La seconda riga non è una direttiva. È un'affermazione. Insiste sul fatto che qualsiasi nome non preceduto da std :: è dello spazio dei nomi standard. Successivamente è la funzione principale C ++.

La prima riga nella funzione principale () è una direttiva. Definisce la dimensione di entrambi gli array, per essere 10. Non finisce con un punto e virgola. Termina con la pressione del tasto di immettere la tastiera '\ n' . Questa linea avrebbe potuto essere ugualmente "int size = 10;". La riga dopo è un'affermazione che definisce il primo array. La linea che segue è la dichiarazione del secondo array, senza inizializzazione pratica, ma con le stesse dimensioni.

Il segmento di codice successivo nella funzione principale, esegue la copia, elemento per elemento, dal primo al secondo array.

È possibile aggiungere i seguenti due segmenti di codice, per stampare entrambi i contenuti dell'array sul terminale (console):

per (int i = 0; icout << arr1[i] << ";
cout << endl;
per (int i = 0; icout << arr2[i] << ";
cout << endl;

L'output dovrebbe essere,

F g h i j k l m n o
F g h i j k l m n o

Copia profonda automatica dell'array

Qui viene utilizzata la funzione std :: copy () della libreria di algoritmo C ++. Ciò significa che l'intestazione dell'algoritmo (libreria) deve essere inclusa nel programma. Non è necessario copiare, elemento per elemento, qui. Il prototipo della funzione std :: copia () è:

modello
Copia dell'outputputputterator di consellexpr (inputterator prima, inputterator,
Risultato outputteratore);

Il primo argomento è un iteratore che indica il primo elemento del contenitore di origine (elenco). Il secondo argomento è un iteratore che punta appena oltre l'ultimo elemento del contenitore di origine. Il terzo argomento è un iteratore che indica il primo elemento del contenitore di destinazione vuoto, che avrebbe già dovuto essere dichiarato.

Questa sintassi può essere interpretata per gli array con il seguente prototipo:

modello
Copia dell'outputputteratore di Costexpr (ARR1, puntatore-solo-pat-arro, arr2);

puntatore-solo-pat-arw-ar1 è uguale alla dimensione ARR1 +. Quindi, il seguente programma, fa una copia automatica profonda di un array a un altro:

#includere
#includere
int main ()

int size = 10;
char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';
char arr2 [dimensione];
copia (arr1, arr1+dimensione, arr2); // Copia automatica
restituzione 0;

Nota l'inclusione della libreria dell'algoritmo. "Int size = 10;" è stato usato, invece di "char arr2 [dimensione];". Si noti che gli array dovevano ancora essere della stessa dimensione ma con il secondo vuoto. L'istruzione di copia automatica è:

copia (arr1, arr1+dimensione, arr2);

La funzione non ha dovuto essere preceduta da "std ::", poiché c'è "usare lo spazio dei nomi std;" In cima al programma.

I seguenti due segmenti di codice possono essere aggiunti per stampare entrambi i contenuti dell'array sul terminale (console):

per (int i = 0; icout << arr1[i] << ";
cout << endl;
per (int i = 0; icout << arr2[i] << ";
cout << endl;

L'output dovrebbe essere,

F g h i j k l m n o
F g h i j k l m n o

Conclusione

In C ++ un array può essere copiato manualmente (a mano) o utilizzando automaticamente la funzione std :: copia () dalla libreria di algoritmo C ++. Nella programmazione del computer, c'è una copia superficiale e c'è una copia profonda. La copia superficiale è quando due nomi di array diversi (vecchi e nuovi) si riferiscono allo stesso contenuto in memoria. La copia profonda è quando i due diversi nomi di array si riferiscono a due contenuti indipendenti, ma stesso, in memoria. Questo articolo ha trattato di copia profonda e non di copia non superficiale.

Con un approccio di copia profonda manuale, vengono creati due array della stessa dimensione. Il primo ha contenuti, mentre il secondo non ha contenuti. Il contenuto del primo viene copiato al secondo, usando il per loop.

La copia automatica profonda di un array a un altro in C ++ coinvolge la funzione std :: copia () della libreria di algoritmo C ++. Ciò significa che l'intestazione dell'algoritmo (libreria) deve essere inclusa nel programma. Non è necessario copiare l'elemento per elemento con il per loop in questo caso poiché la copia è automatica. Il prototipo per la funzione std :: copy (), interpretato per l'array, è:

modello
Copia dell'outputputteratore di Costexpr (ARR1, puntatore-last-element-of-ar1, arr2);