C++ Dynamische Zuordnung von Arrays mit Beispiel

โšก Intelligente Zusammenfassung

C++ Die dynamische Allokation von Arrays erklรคrt, wie man Arrays zur Laufzeit auf dem Heap allokiert, ihre GrรถรŸe รคndert und sie lรถscht. Lessons deckt die Muster fรผr Neuinstallation, Lรถschen[], Initialisierung, Kopieren, GrรถรŸenรคnderung und sicheres Speichern ab.

  • ๐Ÿง  Heap-Allokation: new int[size] erzeugt Arrays, deren GrรถรŸe zur Laufzeit bekannt ist.
  • ๐Ÿ” Initialisierung: new int[size](){} Nullen im Speicher; geschweifte Klammern listen feste Werte auf.
  • ๐Ÿ“ GrรถรŸenรคnderung: GrรถรŸeren Speicher allozieren, mit std::copy kopieren und anschlieรŸend den alten Puffer lรถschen.
  • รฐลธยงยน Richtig lรถschen: Verwenden Sie fรผr Arrays immer die Methode delete[]; niemals die einfache Methode delete.
  • ๐Ÿ“ฆ Bevorzuge std::vector: Modernes C++ Bevorzugt Vektoren fรผr automatische GrรถรŸenanpassung und RAII.
  • ๐Ÿค– AI Revansicht: KI-Assistenten erkennen Lecks und geben hilfreiche Tipps.

C++ Dynamische Zuordnung von Arrays

Was ist ein dynamisches Array?

Ein dynamisches Array รคhnelt einem regulรคren Array, seine GrรถรŸe kann jedoch wรคhrend der Programmlaufzeit geรคndert werden. DynamArray-Elemente belegen einen zusammenhรคngenden Speicherblock.

Sobald ein Array erstellt wurde, kann seine GrรถรŸe nicht mehr geรคndert werden. Ein dynamisches Array ist jedoch anders. Ein dynamisches Array kann seine GrรถรŸe auch dann vergrรถรŸern, wenn es gefรผllt ist.

Bei der Erstellung eines Arrays wird ihm eine vorgegebene Menge an Speicher zugewiesen. Dies ist bei einem dynamischen Array nicht der Fall, da es seine SpeichergrรถรŸe bei Bedarf um einen bestimmten Faktor vergrรถรŸert.

Faktoren, die die Leistung dynamischer Arrays beeinflussen

Die anfรคngliche GrรถรŸe des Arrays und sein Wachstumsfaktor bestimmen seine Leistung. Beachten Sie die folgenden Punkte:

  1. Wenn ein Array eine geringe GrรถรŸe und einen geringen Wachstumsfaktor aufweist, wird der Speicher hรคufiger neu zugewiesen. Dadurch wird die Leistung des Arrays verringert.
  2. Wenn ein Array eine groรŸe GrรถรŸe und einen hohen Wachstumsfaktor aufweist, verfรผgt es รผber einen groรŸen Teil ungenutzten Speichers. Aus diesem Grund kรถnnen GrรถรŸenรคnderungsvorgรคnge lรคnger dauern. Dies verringert die Leistung des Arrays.

Das neue Schlรผsselwort

In C++kรถnnen wir mit dem Schlรผsselwort new ein dynamisches Array erstellen. Die Anzahl der zuzuweisenden Elemente wird in eckigen Klammern angegeben. Dem sollte der Typname vorangestellt werden. Die angeforderte Anzahl von Elementen wird zugewiesen.

Syntax

Das neue Schlรผsselwort hat die folgende Syntax:

pointer_variable = new data_type;

Die Zeigervariable ist der Name der Zeigervariable.

Der Datentyp muss ein gรผltiger C++ Datentyp.

Das Schlรผsselwort gibt dann einen Zeiger auf das erste Element zurรผck. Nachdem wir das dynamische Array erstellt haben, kรถnnen wir es mit dem Schlรผsselwort delete lรถschen.

Beispiel 1:

#include<iostream>
using namespace std;
int main() {
	int x, n;
	cout << "Enter the number of items:" << "\n";
	cin >>n;
	int *arr = new int[n];
	cout << "Enter " << n << " items" << endl;
	for (x = 0; x < n; x++) {
		cin >> arr[x];
	}
	cout << "You entered: ";
	for (x = 0; x < n; x++) {
		cout << arr[x] << " ";
	}
	return 0;
}

Ausgang:

Das neue Schlรผsselwort

Hier ist ein Screenshot des Codes:

Das neue Schlรผsselwort

Code Erlรคuterung:

  1. Fรผgen Sie die iostream-Header-Datei in unser Programm ein, um sie zu verwenden Funktionen.
  2. Fรผgen Sie den std-Namespace in unser Programm ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  3. Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil der Funktion hinzugefรผgt werden.
  4. Deklarieren Sie zwei ganzzahlige Variablen x und n.
  5. Geben Sie einen Text auf der Konsole aus, der den Benutzer auffordert, den Wert der Variablen n einzugeben.
  6. Lesen Sie Benutzereingaben von der Tastatur und weisen Sie sie der Variablen n zu.
  7. Deklarieren Sie ein Array zur Aufnahme von insgesamt n Ganzzahlen und weisen Sie es der Zeigervariablen *arr zu.
  8. Drucken Sie eine Nachricht, die den Benutzer auffordert, n Elemente einzugeben.
  9. Verwenden Sie eine for-Schleife, um eine Schleifenvariable x zu erstellen, um die vom Benutzer eingegebenen Elemente zu durchlaufen.
  10. Lesen Sie die vom Benutzer eingegebenen Elemente und speichern Sie sie im Array arr.
  11. Ende des Kรถrpers des for-Schleife.
  12. Drucken Sie einen Text auf der Konsole.
  13. Verwenden Sie eine for-Schleife, um eine Schleifenvariable x zu erstellen, um die Elemente des Arrays zu durchlaufen.
  14. Geben Sie die im Array mit dem Namen arr enthaltenen Werte auf der Konsole aus.
  15. Ende des Kรถrpers der for-Schleife.
  16. Das Programm muss bei erfolgreichem Abschluss einen Wert zurรผckgeben.
  17. Ende des Hauptteils der main()-Funktion.

HINWEIS: Im obigen Beispiel kann der Benutzer wรคhrend der Laufzeit eine beliebige GrรถรŸe fรผr das Array angeben. Dies bedeutet, dass die GrรถรŸe des Arrays zur Laufzeit bestimmt wird.

Initialisierung dynamisch zugewiesener Arrays

Es ist einfach, ein dynamisches Array auf 0 zu initialisieren.

Syntax:

int *array{ new int[length]{} };

In der obigen Syntax gibt die Lรคnge die Anzahl der Elemente an, die dem Array hinzugefรผgt werden sollen. Da wir das Array auf 0 initialisieren mรผssen, sollte dieses leer bleiben.

Wir kรถnnen ein dynamisches Array mithilfe einer Initialisierungsliste initialisieren. Lassen Sie uns ein Beispiel erstellen, das dies demonstriert.

Beispiel 2:

#include <iostream>
using namespace std;

int main(void) {

	int x; 

	int *array{ new int[5]{ 10, 7, 15, 3, 11 } };

	cout << "Array elements: " << endl;

	for (x = 0; x < 5; x++) {

		cout << array[x] << endl;
	}

	return 0;
}

Ausgang:

Initialisierung dynamisch zugewiesener Arrays

Hier ist ein Screenshot des Codes:

Initialisierung dynamisch zugewiesener Arrays

Code Erlรคuterung:

  1. Binden Sie die iostream-Header-Datei in unser Programm ein, um dessen Funktionen zu nutzen.
  2. Fรผgen Sie den std-Namespace in unser Programm ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  3. Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil der Funktion hinzugefรผgt werden.
  4. Deklarieren Sie eine ganzzahlige Variable mit dem Namen x.
  5. Deklarieren Sie ein dynamisches Array mit dem Namen array unter Verwendung einer Initialisierungsliste. Das Array enthรคlt 5 ganzzahlige Elemente. Beachten Sie, dass wir den Operator โ€ž=โ€œ zwischen der Arraylรคnge und der Initialisierungsliste nicht verwendet haben.
  6. Drucken Sie einen Text auf der Konsole. Das Endl ist ein C++ Schlรผsselwort, das Zeilenende bedeutet. Es bewegt den Cursor zum nรคchsten Satz.
  7. Verwenden Sie eine for-Schleife, um die Array-Elemente zu durchlaufen.
  8. Drucken Sie den Inhalt des Arrays mit dem Namen array auf der Konsole aus.
  9. Ende des Kรถrpers der for-Schleife.
  10. Das Programm muss bei erfolgreichem Abschluss einen Wert zurรผckgeben.
  11. Ende des Hauptteils der main()-Funktion.

GrรถรŸenรคnderung von Arrays

Die Lรคnge eines dynamischen Arrays wird wรคhrend der Zuordnungszeit festgelegt.

Aber, C++ verfรผgt รผber keinen integrierten Mechanismus zum ร„ndern der GrรถรŸe eines Arrays, nachdem es zugewiesen wurde.

Sie kรถnnen diese Herausforderung jedoch meistern, indem Sie dynamisch ein neues Array zuweisen, die Elemente kopieren und dann das alte Array lรถschen.

Beachten Sie: Da diese Technik fehleranfรคllig ist, sollten Sie sie vermeiden.

Arrays dynamisch lรถschen

Ein dynamisches Array sollte aus dem Computerspeicher gelรถscht werden, sobald sein Zweck erfรผllt ist. Die delete-Anweisung kann Ihnen dabei helfen. Der freigegebene Speicherplatz kann dann zur Aufnahme eines weiteren Datensatzes genutzt werden. Auch wenn Sie das dynamische Array nicht aus dem Computerspeicher lรถschen, wird es automatisch gelรถscht, sobald das Programm beendet wird.

Hinweis:

Um ein dynamisches Array aus dem Computerspeicher zu lรถschen, sollten Sie delete[] anstelle von delete verwenden. Das [] weist die CPU an, mehrere Variablen statt einer Variablen zu lรถschen. Die Verwendung von delete anstelle von delete[] beim Umgang mit einem dynamischen Array kann zu Problemen fรผhren. Beispiele fรผr solche Probleme sind Speicherlecks, Datenbeschรคdigung, Abstรผrze usw.

Beispiel 3:

#include<iostream>
using namespace std;
int main() {
	int x, n;
	cout << "How many numbers will you type?" << "\n";
	cin >>n;
	int *arr = new int[n];
	cout << "Enter " << n << " numbers" << endl;
	for (x = 0; x < n; x++) {
		cin >> arr[x];
	}
	cout << "You typed: ";
	for (x = 0; x < n; x++) {
		cout << arr[x] << " ";
	}
	cout << endl;
	delete [] arr;
	return 0;
}

Ausgang:

Arrays dynamisch lรถschen

Hier ist ein Screenshot des Codes:

Arrays dynamisch lรถschen

Code Erlรคuterung:

  1. Binden Sie die iostream-Header-Datei in unser Programm ein, um deren Funktionen nutzen zu kรถnnen.
  2. Fรผgen Sie den std-Namespace in unser Programm ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  3. Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil der Funktion hinzugefรผgt werden.
  4. Deklarieren Sie zwei Variablen x und n vom Datentyp Integer.
  5. Drucken Sie einen Text auf der Konsole. Der Text fordert den Benutzer auf, die Anzahl der einzugebenden Zahlen anzugeben.
  6. Lesen Sie Benutzereingaben von der Tastatur. Der Eingabewert wird der Variablen n zugewiesen.
  7. Deklarieren Sie eine Zeigervariable *arr. Das Array arr reserviert etwas Speicher, um insgesamt n Ganzzahlen zu speichern.
  8. Drucken Sie eine Meldung auf der Konsole, die den Benutzer auffordert, n Zahlen einzugeben.
  9. Erstellen Sie eine For-Schleife und die Schleifenvariable x, um รผber die vom Benutzer eingegebenen Zahlen zu iterieren.
  10. Liest die vom Benutzer eingegebenen Zahlen und speichert sie im Array arr.
  11. Ende des Kรถrpers der for-Schleife.
  12. Drucken Sie einen Text auf der Konsole.
  13. Verwenden Sie eine for-Schleife und die Schleifenvariable x, um den Inhalt des Arrays arr zu durchlaufen.
  14. Geben Sie die Werte des Arrays arr auf der Konsole aus.
  15. Ende des Kรถrpers der for-Schleife.
  16. Drucken Sie eine leere Zeile auf der Konsole.
  17. Geben Sie den Speicher des Arrays arr frei.
  18. Das Programm gibt einen Wert zurรผck, wenn es erfolgreich abgeschlossen wurde.
  19. Ende des Hauptteils der main()-Funktion.

Hรคufig gestellte Fragen

Statische Arrays werden zur Kompilierzeit auf dem Stack gespeichert. Dynamische Arrays werden zur Laufzeit im Heap gespeichert.

KI-Tools erkennen Lecks, fehlende delete[]-Anweisungen und schlagen Ersetzungen durch unique_ptr oder Vektoren vor.

Ja. Copilot wandelt die rohen new- und delete-Befehle in std::vector- oder Smartpointer um.

GrรถรŸeren Speicher allozieren, mit std::copy kopieren, den alten Puffer mit delete[] lรถschen oder std::vector verwenden.

`delete[]` fรผhrt Destruktoren aus und gibt den Block frei. Das einfache `delete` auf Arrays fรผhrt zu undefiniertem Verhalten.

Verwenden Sie es standardmรครŸig. Es verwaltet den Speicher, unterstรผtzt GrรถรŸenรคnderungen, Bereichsschleifen und Ausnahmen sicher.

Nein. SyncChronologische Zuweisung, Zugriff und Lรถschung mit Mutexen oder atomaren Operationen.

Verwenden Sie std::vector oder std::unique_ptr um ein manuelles Lรถschen zu vermeiden[].

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: