So kopieren Sie ein Array in C ++

So kopieren Sie ein Array in C ++
In C ++ kann ein Array manuell (von Hand) oder mit der Funktion STD :: Copy () aus der C ++ - Algorithmus -Bibliothek kopiert werden. Bei der Computerprogrammierung gibt es ein flaches Kopieren und ein tiefes Kopieren. Flaches Kopieren ist, wenn zwei verschiedene Array -Namen (alt und neu) auf denselben Inhalt beziehen. Tiefes Kopieren ist, wenn sich die beiden verschiedenen Array -Namen auf zwei unabhängige, aber gleiche Inhalte beziehen, im Speicher. Dieser Artikel befasst sich mit tiefem Kopieren.

Betrachten Sie das folgende Array:

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

Dies ist eine Reihe von zehn Zeichen aus den Buchstaben, 'f' bis 'o'. Der Name dieses Arrays ist arr1. Betrachten Sie das folgende Array:

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

Der Name dieses Arrays ist arr2. Beachten Sie, dass beide Inhalte gleich sind. arr2 wäre eine tiefe Kopie von arr1, wenn beide initializer_listen in verschiedenen Regionen im Speicher des Computers befinden. In diesem Artikel wird man erläutert, manuell tiefes Kopieren des Arrays und automatisches Kopieren des Arrays in C++.

Artikelinhalt

- Handbuch tiefes Kopieren des Arrays

- Automatisches Tiefkopieren des Arrays

- Abschluss

Handbuch tiefes Kopieren des Arrays

Mit diesem Ansatz werden zwei Arrays derselben Größe erstellt. Der erste hat Inhalt, während der zweite keinen Inhalt hat. Der Inhalt des ersten wird mit dem For-Loop in die zweite kopiert. Das folgende Programm zeigt dies:

#enthalten
Verwenden von Namespace STD;
int main ()

#define Größe 10
char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';
char arr2 [Größe];
für (int i = 0; iarr2 [i] = arr1 [i];
Rückkehr 0;

Die erste Zeile des Programms enthält den C ++ - iostream -Header (Bibliothek) für Eingabe und Ausgabe. Diese erste Zeile ist eine Richtlinie. Die zweite Zeile ist keine Richtlinie. Es ist eine Aussage. Es besteht darauf, dass jeder Name, dem Std :: vom Standard -Namespace vorgeht, nicht vorhanden ist. Danach ist die C ++ - Hauptfunktion.

Die erste Zeile in der Funktion main () ist eine Richtlinie. Es definiert die Größe beider Arrays, um 10 zu sein. Es endet nicht mit einem Semikolon. Es endet mit der Drücke der Tastatureingabetaste '\ n' . Diese Linie hätte gleichermaßen "int size = 10" sein können;. Die Linie nach ist eine Anweisung, die das erste Array definiert. Die folgende Linie ist die Erklärung des zweiten Arrays ohne praktische Initialisierung, jedoch mit der gleichen Größe.

Das nächste Code -Segment in der Hauptfunktion führt das Element für das Element von der ersten bis zum zweiten Array aus.

Die folgenden zwei Codesegmente können hinzugefügt werden, um beide Array -Inhalte am Terminal (Konsole) zu drucken:

für (int i = 0; iCout << arr1[i] << ";
Cout << endl;
für (int i = 0; iCout << arr2[i] << ";
Cout << endl;

Die Ausgabe sollte sein,

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

Automatisches Tiefkopieren des Arrays

Hier wird die STD :: Copy () -Funktion der C ++ - Algorithmus -Bibliothek verwendet. Dies bedeutet, dass der Algorithmus -Header (Bibliothek) in das Programm aufgenommen werden muss. Es ist nicht erforderlich, hier Element, Element nach Element zu kopieren. Der Prototyp der Funktion STD :: Copy () lautet:

Vorlage
CONTEXPR OUTPUTICERATOR Kopie (InputIterator zuerst, InputIterator zuletzt,
Ausgabeerergebnis);

Das erste Argument ist ein Iterator, der auf das erste Element des Quellcontainers verweist (Liste). Das zweite Argument ist ein Iterator, der direkt über das letzte Element des Quellbehälters hinaus zeigt. Das dritte Argument ist ein Iterator, der auf das erste Element des leeren Zielcontainers verweist, der bereits hätte erklärt werden müssen.

Diese Syntax kann für Arrays mit dem folgenden Prototyp interpretiert werden:

Vorlage
contexpr optimalIderator copy (arr1, zeigertojust-past-arr1, arr2);

Zeiger-zu-Just-Past-arr1 ist die gleiche wie bei arr1 + Größe. Das folgende Programm führt also automatisch tiefes Kopieren eines Arrays zu einem anderen:

#enthalten
#enthalten
int main ()

int size = 10;
char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';
char arr2 [Größe];
Kopie (arr1, arr1+Größe, arr2); // automatisches Kopieren
Rückkehr 0;

Beachten Sie die Einbeziehung der Algorithmusbibliothek. "Int size = 10;" wurde anstelle von "char arr2 [Größe] verwendet;. Beachten Sie, dass die Arrays immer noch von gleicher Größe haben mussten, aber mit dem zweiten leer sind. Die automatische Kopieranweisung lautet:

Kopie (arr1, arr1+Größe, arr2);

Der Funktion musste nicht „std ::“ vorausgehen, da es „den Namespace std verwenden“; an der Spitze des Programms.

Die folgenden zwei Codesegmente können hinzugefügt werden, um beide Array -Inhalte am Terminal (Konsole) zu drucken:

für (int i = 0; iCout << arr1[i] << ";
Cout << endl;
für (int i = 0; iCout << arr2[i] << ";
Cout << endl;

Die Ausgabe sollte sein,

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

Abschluss

In C ++ kann ein Array manuell (von Hand) oder automatisch mit der Funktion STD :: Copy () aus der C ++ - Algorithmus -Bibliothek kopiert werden. Bei der Computerprogrammierung gibt es ein flaches Kopieren und ein tiefes Kopieren. Flaches Kopieren ist, wenn sich zwei verschiedene Array -Namen (alt und neu) auf denselben Inhalt im Speicher beziehen. Tiefes Kopieren ist, wenn sich die beiden verschiedenen Array -Namen auf zwei unabhängige, aber gleiche Inhalte im Speicher beziehen. Dieser Artikel hat sich mit tiefem Kopieren und nicht flachem Kopieren befasst.

Mit manuellem Tiefenkopieransatz werden zwei Arrays derselben Größe erstellt. Der erste hat Inhalt, während der zweite keinen Inhalt hat. Der Inhalt des ersten wird mit dem For-Loop auf die zweite kopiert.

Das automatische Deep -Kopieren eines Arrays auf ein anderes in C ++ umfasst die Funktion STD :: Copy () der C ++ - Algorithmus -Bibliothek. Dies bedeutet, dass der Algorithmus -Header (Bibliothek) in das Programm aufgenommen werden muss. In diesem Fall müssen in diesem Fall kein Element nach Element kopiert werden, da das Kopieren automatisch ist. Der Prototyp für die Funktion STD :: Copy (), die für das Array interpretiert wird, lautet:

Vorlage
CONTEXPR OUTPORTIERERKOPPET (ARR1, Zeiger-auf-Element-Element-of-arr1, arr2);