C++ Dynamische Zuordnung von Arrays mit Beispiel
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:
- 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.
- 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:
Hier ist ein Screenshot des Codes:
Code-Erklärung:
- Fügen Sie die iostream-Header-Datei in unser Programm ein, um sie zu verwenden Funktionen.
- Fügen Sie den std-Namespace in unser Programm ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil der Funktion hinzugefügt werden.
- Deklarieren Sie zwei ganzzahlige Variablen x und n.
- Geben Sie einen Text auf der Konsole aus, der den Benutzer auffordert, den Wert der Variablen n einzugeben.
- Lesen Sie Benutzereingaben von der Tastatur und weisen Sie sie der Variablen n zu.
- Deklarieren Sie ein Array zur Aufnahme von insgesamt n Ganzzahlen und weisen Sie es der Zeigervariablen *arr zu.
- Drucken Sie eine Nachricht, die den Benutzer auffordert, n Elemente einzugeben.
- Verwenden Sie eine for-Schleife, um eine Schleifenvariable x zu erstellen, um die vom Benutzer eingegebenen Elemente zu durchlaufen.
- Lesen Sie die vom Benutzer eingegebenen Elemente und speichern Sie sie im Array arr.
- Ende des Körpers des for-Schleife.
- Drucken Sie einen Text auf der Konsole.
- Verwenden Sie eine for-Schleife, um eine Schleifenvariable x zu erstellen, um die Elemente des Arrays zu durchlaufen.
- Geben Sie die im Array mit dem Namen arr enthaltenen Werte auf der Konsole aus.
- Ende des Körpers der for-Schleife.
- Das Programm muss bei erfolgreichem Abschluss einen Wert zurückgeben.
- 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:
Hier ist ein Screenshot des Codes:
Code-Erklärung:
- Binden Sie die iostream-Header-Datei in unser Programm ein, um dessen Funktionen zu nutzen.
- Fügen Sie den std-Namespace in unser Programm ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil der Funktion hinzugefügt werden.
- Deklarieren Sie eine ganzzahlige Variable mit dem Namen x.
- 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.
- 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.
- Verwenden Sie eine for-Schleife, um die Array-Elemente zu durchlaufen.
- Drucken Sie den Inhalt des Arrays mit dem Namen array auf der Konsole aus.
- Ende des Körpers der for-Schleife.
- Das Programm muss bei erfolgreichem Abschluss einen Wert zurückgeben.
- 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:
Hier ist ein Screenshot des Codes:
Code-Erklärung:
- Binden Sie die iostream-Header-Datei in unser Programm ein, um deren Funktionen nutzen zu können.
- Fügen Sie den std-Namespace in unser Programm ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
- Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil der Funktion hinzugefügt werden.
- Deklarieren Sie zwei Variablen x und n vom Datentyp Integer.
- Drucken Sie einen Text auf der Konsole. Der Text fordert den Benutzer auf, die Anzahl der einzugebenden Zahlen anzugeben.
- Lesen Sie Benutzereingaben von der Tastatur. Der Eingabewert wird der Variablen n zugewiesen.
- Deklarieren Sie eine Zeigervariable *arr. Das Array arr reserviert etwas Speicher, um insgesamt n Ganzzahlen zu speichern.
- Drucken Sie eine Meldung auf der Konsole, die den Benutzer auffordert, n Zahlen einzugeben.
- Erstellen Sie eine For-Schleife und die Schleifenvariable x, um über die vom Benutzer eingegebenen Zahlen zu iterieren.
- Liest die vom Benutzer eingegebenen Zahlen und speichert sie im Array arr.
- Ende des Körpers der for-Schleife.
- Drucken Sie einen Text auf der Konsole.
- Verwenden Sie eine for-Schleife und die Schleifenvariable x, um den Inhalt des Arrays arr zu durchlaufen.
- Geben Sie die Werte des Arrays arr auf der Konsole aus.
- Ende des Körpers der for-Schleife.
- Drucken Sie eine leere Zeile auf der Konsole.
- Geben Sie den Speicher des Arrays arr frei.
- Das Programm gibt einen Wert zurück, wenn es erfolgreich abgeschlossen wurde.
- Ende des Hauptteils der main()-Funktion.
Zusammenfassung
- Reguläre Arrays haben eine feste Größe. Sie können ihre Größe nach der Deklaration nicht mehr ändern.
- Bei diesen Array-Typen wird die Speichergröße während der Kompilierungszeit bestimmt.
- Dynamische Arrays sind anders. Ihre Größe kann zur Laufzeit geändert werden.
- Bei dynamischen Arrays wird die Größe zur Laufzeit bestimmt.
- Dynamische Arrays in C++ werden mit dem Schlüsselwort „new“ deklariert.
- Wir verwenden eckige Klammern, um die Anzahl der Elemente anzugeben, die im dynamischen Array gespeichert werden sollen.
- Wenn wir mit dem Array fertig sind, können wir den Speicher mit dem Löschoperator freigeben.
- Verwenden Sie den Löschoperator mit [], um den Speicher aller Array-Elemente freizugeben.
- Ein Löschvorgang ohne [] gibt den Speicher nur eines einzelnen Elements frei.
- Es gibt keinen integrierten Mechanismus zur Größenänderung C++ Arrays.
- Um ein Array mit einem Listeninitialisierer zu initialisieren, verwenden wir nicht den Operator „=“.