Comment copier un tableau en C ++

Comment copier un tableau en C ++
En C ++, un tableau peut être copié manuellement (à la main) ou en utilisant la fonction std :: copy (), à partir de la bibliothèque de l'algorithme C ++. Dans la programmation informatique, il y a une copie peu profonde et il y a une copie profonde. La copie superficielle est lorsque deux noms de tableaux différents (anciens et nouveaux), reportez-vous au même contenu. La copie profonde, c'est lorsque les deux noms de tableaux différents se réfèrent à deux contenus indépendants mais mêmes, en mémoire. Cet article traite de la copie profonde.

Considérez le tableau suivant:

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

Ceci est un tableau de dix caractères des lettres, «f» à «o». Le nom de ce tableau est Arr1. Considérez le tableau suivant:

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

Le nom de ce tableau est Arr2. Notez que les deux contenus sont les mêmes. ARR2 serait une copie profonde de l'ARR1 si les deux initialiseurs se trouvent dans différentes régions de la mémoire de l'ordinateur. Cet article explique, la copie en profondeur manuelle du tableau et la copie profonde automatique du tableau, en C++.

Contenu de l'article

- Copie profonde manuelle du tableau

- Copie profonde automatique du tableau

- Conclusion

Copie profonde manuelle du tableau

Avec cette approche, deux tableaux de la même taille sont créés. Le premier a du contenu tandis que le second n'a pas de contenu. Le contenu du premier est copié dans le second en utilisant la boucle pour. Le programme suivant illustre ceci:

#inclure
Utilisation de Namespace Std;
int main()

#define taille 10
char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';
char Arr2 [taille];
pour (int i = 0; iarr2 [i] = arr1 [i];
retour 0;

La première ligne du programme comprend l'en-tête C ++ IoStream (bibliothèque) pour l'entrée et la sortie. Cette première ligne est une directive. La deuxième ligne n'est pas une directive. C'est une déclaration. Il insiste sur le fait que tout nom non précédé de std :: est de l'espace de noms standard. Par la suite est la fonction principale C ++.

La première ligne de la fonction principale () est une directive. Il définit la taille des deux tableaux, à 10. Ça ne se termine pas par un point-virgule. Il se termine par la pression du clavier Entrée de la touche '\ n' . Cette ligne aurait également pu être «int size = 10»;. La ligne après est une déclaration qui définit le premier tableau. La ligne suivante est la déclaration du deuxième tableau, sans initialisation pratique, mais de la même taille.

Le segment de code suivant dans la fonction principale, fait l'élément Copie, élément, du premier au deuxième tableau.

Les deux segments de code suivants peuvent être ajoutés pour imprimer les deux contenus du tableau au terminal (console):

pour (int i = 0; icouter << arr1[i] << ";
couter << endl;
pour (int i = 0; icouter << arr2[i] << ";
couter << endl;

La sortie doit être,

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

Copie profonde automatique du tableau

Ici, la fonction std :: copy () de la bibliothèque d'algorithme C ++ est utilisée. Cela signifie que l'en-tête d'algorithme (bibliothèque) doit être inclus dans le programme. Il n'est pas nécessaire de copier, élément par élément, ici. Le prototype de la fonction std :: copy () est:

modèle
Copie de sortie de Consxpr (Inputiterator First, InputIterator Last,
Résultat de sortie de sortie);

Le premier argument est un itérateur qui pointe vers le premier élément du conteneur source (liste). Le deuxième argument est un itérateur qui pointe juste au-delà du dernier élément du conteneur source. Le troisième argument est un itérateur qui pointe vers le premier élément du conteneur de destination vide, qui aurait déjà dû être déclaré.

Cette syntaxe peut être interprétée pour les tableaux avec le prototype suivant:

modèle
CopieTiterator de Consxpr (Arr1, pointer-to-just-sast-arr1, arr2);

pointer-to-juste passant-ARR1 est le même que la taille de l'arr1 +. Ainsi, le programme suivant, la copie profonde automatique d'un tableau à un autre:

#inclure
#inclure
int main()

int size = 10;
char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';
char Arr2 [taille];
Copie (Arr1, Arr1 + Size, Arr2); // Copie automatique
retour 0;

Notez l'inclusion de la bibliothèque d'algorithme. «Int size = 10;» a été utilisé, au lieu de «char arr2 [taille];». Notez que les tableaux devaient encore être de la même taille mais avec le second vide. La déclaration de copie automatique est:

Copie (Arr1, Arr1 + Size, Arr2);

La fonction n'a pas besoin d'être précédée de «std ::», car il y a «Utilisation de l'espace de noms std»; en haut du programme.

Les deux segments de code suivants peuvent être ajoutés pour imprimer les deux contenus du tableau au terminal (console):

pour (int i = 0; icouter << arr1[i] << ";
couter << endl;
pour (int i = 0; icouter << arr2[i] << ";
couter << endl;

La sortie doit être,

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

Conclusion

En C ++, un tableau peut être copié manuellement (à la main) ou à l'aide de la fonction std :: copy () de la bibliothèque de l'algorithme C ++. Dans la programmation informatique, il y a une copie peu profonde et il y a une copie profonde. La copie peu profonde est lorsque deux noms de tableaux différents (anciens et nouveaux) se réfèrent au même contenu en mémoire. La copie profonde, c'est lorsque les deux noms de tableau différents se réfèrent à deux contenus indépendants, mais même, en mémoire. Cet article a traité de copie profonde et non de copie peu profonde.

Avec une approche manuelle de copie profonde, deux tableaux de la même taille sont créés. Le premier a du contenu, tandis que le second n'a pas de contenu. Le contenu du premier est copié au second, en utilisant la boucle.

La copie profonde automatique d'un tableau à un autre en C ++ implique la fonction std :: copy () de la bibliothèque de l'algorithme C ++. Cela signifie que l'en-tête d'algorithme (bibliothèque) doit être inclus dans le programme. Il n'est pas nécessaire de copier l'élément par élément avec la boucle pour ce cas car la copie est automatique. Le prototype de la fonction std :: copy (), interprété pour le tableau, est:

modèle
COPY CONSEXPR Outputiterator (Arr1, pointer-to-last-element-of-ar1, arr2);