Jak skopiować tablicę w C ++

Jak skopiować tablicę w C ++
W C ++ tablica można kopiować ręcznie (ręcznie) lub za pomocą funkcji STD :: copy () z biblioteki algorytmu C ++. W programowaniu komputerowym jest płytkie kopiowanie i głębokie kopiowanie. Płytkie kopiowanie ma miejsce, gdy dwie różne nazwy tablicy (stare i nowe), odnoszą się do tej samej treści. Głębokie kopiowanie ma miejsce, gdy dwie różne nazwy tablicy odnoszą się do dwóch niezależnych, ale samych treści, w pamięci. Ten artykuł dotyczy głębokiego kopiowania.

Rozważ następującą tablicę:

char Arr1 [] = „f”, „g”, „h”, „i”, „j”, „k”, „l”, „m”, „n”, „o”;

To jest szereg dziesięciu znaków z liter, „F” do „O”. Nazwa tej tablicy to ARR1. Rozważ następującą tablicę:

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

Nazwa tej tablicy to ARR2. Zauważ, że obie treści są takie same. ARR2 byłby głęboką kopią ARR1, gdyby oba listy inicjalizatora znajdują się w różnych regionach w pamięci komputera. W tym artykule wyjaśnia, ręczne głębokie kopiowanie tablicy i automatyczne głębokie kopiowanie tablicy w C++.

Treść artykułu

- Ręczne głębokie kopiowanie tablicy

- Automatyczne głębokie kopiowanie tablicy

- Wniosek

Ręczne głębokie kopiowanie tablicy

Przy takim podejściu powstają dwie tablice tego samego rozmiaru. Pierwszy ma treść, podczas gdy drugi nie ma treści. Zawartość pierwszego jest skopiowana do drugiego za pomocą pętli. Poniższy program ilustruje to:

#włączać
za pomocą przestrzeni nazw Std;
int main ()

#określić rozmiar 10
char Arr1 [] = „f”, „g”, „h”, „i”, „j”, „k”, „l”, „m”, „n”, „o”;
char Arr2 [rozmiar];
dla (int i = 0; iarr2 [i] = arr1 [i];
powrót 0;

Pierwszy wiersz programu zawiera nagłówek C ++ iostream (biblioteka) do wejścia i wyjścia. Ten pierwszy wiersz jest dyrektywą. Druga linia nie jest dyrektywą. To jest stwierdzenie. Nalega, aby każda nazwa nie poprzedzona std :: jest standardową przestrzenią nazw. Następnie jest główna funkcja C ++.

Pierwsza linia w funkcji main () jest dyrektywa. Definiuje rozmiar obu tablic, wynosił 10. Nie kończy się półkolisem. Kończy się naciśnięciem klawisza klawiatury „\ n” . Ta linia mogłaby być równie „int size = 10;”. Linia po stwierdzeniu określa pierwszą tablicę. Poniższa linia jest deklaracją drugiej tablicy, bez praktycznej inicjalizacji, ale o tym samym rozmiarze.

Następny segment kodu w głównej funkcji, czy kopia, element według elementu, od pierwszej do drugiej tablicy.

Można dodać dwa segmenty kodu, aby wydrukować obie zawartość tablicy na terminalu (konsola):

dla (int i = 0; iCout << arr1[i] << ";
Cout << endl;
dla (int i = 0; iCout << arr2[i] << ";
Cout << endl;

Wyjście powinno być,

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

Automatyczne głębokie kopiowanie tablicy

Tutaj używana jest funkcja std :: copy () biblioteki algorytmu C ++. Oznacza to, że nagłówek algorytmu (biblioteka) musi zostać włączony do programu. Tutaj nie ma potrzeby kopiowania, elementu według elementu. Prototyp funkcji STD :: copy () to:

szablon
Constexpr Outputiterator Copy (pierwsza Inputiterator, Inputiterator Last,
Wynik wyjściowy);

Pierwszym argumentem jest iterator, który wskazuje pierwszy element kontenera źródłowego (lista). Drugim argumentem jest iterator, który wskazuje tuż poza ostatnim elementem kontenera źródłowego. Trzecim argumentem jest iterator, który wskazuje na pierwszy element pustego pojemnika docelowego, który powinien być już zadeklarowany.

Ta składnia można interpretować dla tablic z następującym prototypem:

szablon
Constexpr Outputiterator Copy (ARR1, wskaźnik do-prawem-past-arr1, ARR2);

wskaźnik do prążka-past-arr1 jest taki sam jak rozmiar Arr1 +. Tak więc, następujący program, automatyczne głębokie kopiowanie jednej tablicy do drugiej:

#włączać
#włączać
int main ()

int size = 10;
char Arr1 [] = „f”, „g”, „h”, „i”, „j”, „k”, „l”, „m”, „n”, „o”;
char Arr2 [rozmiar];
kopia (arr1, arr1+rozmiar, arr2); // Auto Kopiowanie
powrót 0;

Zwróć uwagę na włączenie biblioteki algorytmu. „Int rozmiar = 10;” został użyty zamiast „char Arr2 [rozmiar];”;. Zauważ, że tablice wciąż musiały być tego samego rozmiaru, ale z drugim pustym. Automatyczne oświadczenie kopiowania to:

kopia (arr1, arr1+rozmiar, arr2);

Funkcja nie musiała być poprzedzona „std ::”, ponieważ istnieje „użycie przestrzeni nazw”; Na szczycie programu.

Można dodać dwa następujące segmenty kodu, aby wydrukować obie zawartość tablicy na terminalu (konsola):

dla (int i = 0; iCout << arr1[i] << ";
Cout << endl;
dla (int i = 0; iCout << arr2[i] << ";
Cout << endl;

Wyjście powinno być,

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

Wniosek

W C ++ tablica można kopiować ręcznie (ręcznie) lub automatycznie za pomocą funkcji STD :: copy () z biblioteki algorytmu C ++. W programowaniu komputerowym jest płytkie kopiowanie i głębokie kopiowanie. Płytkie kopiowanie ma miejsce, gdy dwie różne nazwy tablicy (stare i nowe) odnoszą się do tej samej treści w pamięci. Głębokie kopiowanie ma miejsce, gdy dwie różne nazwy tablicy odnoszą się do dwóch niezależnych, ale tej samej treści, w pamięci. Ten artykuł dotyczył głębokiego kopiowania, a nie płytkiego kopiowania.

Z ręcznym podejściem głębokim kopiowaniem tworzone dwie tablice tego samego rozmiaru. Pierwszy ma treść, podczas gdy drugi nie ma treści. Zawartość pierwszego jest kopiowana do drugiego, używa.

Automatyczne głębokie kopiowanie jednej tablicy do drugiej w C ++ obejmuje funkcję STD :: copy () biblioteki algorytmu C ++. Oznacza to, że nagłówek algorytmu (biblioteka) musi zostać włączony do programu. W tym przypadku nie ma potrzeby kopiowania elementu według elementu z pętlą, ponieważ kopiowanie jest automatyczne. Prototyp funkcji STD :: copy (), interpretowany dla tablicy, to:

szablon
Constexpr Outputiterator Copy (ARR1, Wskaźnik do Lastelement-of-Arr1, ARR2);