C++ Dynamische Array‑Allocatie: Praktische Handleiding met Code‑Voorbeelden
Wat is een Dynamische Array?
Een dynamische array lijkt sterk op een gewone array, maar de grootte is wijzigbaar tijdens de uitvoering van het programma. Elementen van een dynamische array bezetten een aaneengesloten geheugenblok.
Eenmaal een array gecreëerd, kan de grootte niet meer veranderd worden. Een dynamische array is anders: het kan zijn grootte uitbreiden zelfs nadat het gevuld is.
Tijdens de creatie van een array wordt een vooraf bepaalde hoeveelheid geheugen toegekend. Dit is niet het geval bij een dynamische array, want die vergroot het geheugen met een bepaalde factor wanneer er behoefte is.
In deze C++ tutorial leer je:
- Wat is een dynamische array?
- Factoren die de prestaties van dynamische arrays beïnvloeden
- Het
new-keyword - Initialiseren van dynamisch toegewezen arrays
- Arrays resizen
- Dynamisch arrays verwijderen
Factoren die Prestaties Beïnvloeden
De initiële grootte van de array en de groeifactor bepalen de prestaties. Let op:
- Als een array een kleine grootte en een kleine groeifactor heeft, zal het vaker geheugen heralloceren. Dit verlaagt de prestaties.
- Als een array een grote grootte en een grote groeifactor heeft, zal het een groot ongebruikt geheugenstuk hebben. Hierdoor duren resize‑operaties langer. Dit verlaagt de prestaties.
Het new‑keyword
In C++ kunnen we een dynamische array maken met het new-keyword. Het aantal items dat moet worden toegewezen, wordt gespecificeerd tussen vierkante haken. De typenaam moet hiervoorafgaan. Het gevraagde aantal items wordt toegewezen.
Syntaxis:
Het new-keyword heeft de volgende syntaxis:
pointer_variabele = new data_type;
De pointer_variabele is de naam van de pointer‑variabele.
De data_type moet een geldig C++ datatype zijn.
Het keyword retourneert vervolgens een pointer naar het eerste item. Na het maken van de dynamische array kunnen we het verwijderen met het delete-keyword.
Voorbeeld 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;
}
Output:

Hier is een screenshot van de code:

Code‑uitleg:
- Include de iostream‑header voor gebruik van functies.
- Include de std‑naamruimte om klassen zonder prefix te gebruiken.
- Roep
main()aan; programmeerlogica gaat in de body. - Declareer twee integer‑variabelen
xenn. - Print prompt om de gebruiker
nin te voeren. - Lees invoer en wijs toe aan
n. - Declareer een array voor
nintegers en wijs toe aan pointer*arr. - Print bericht om
nitems in te voeren. - Gebruik een for‑lus met lusvariabele
xom over invoer te itereren. - Lees elementen en sla op in array
arr. - Einde for‑lus body.
- Print tekst op console.
- Gebruik for‑lus om over array‑elementen te itereren.
- Print waarden van array
arr. - Einde for‑lus body.
- Programma retourneert waarde bij succes.
- Einde
main()body.
LET OP: In het bovenstaande voorbeeld mag de gebruiker elke grootte specificeren tijdens runtime. Dit betekent dat de array‑grootte tijdens runtime bepaald wordt.
Initialiseren van Dynamisch Toegewezen Arrays
Het is eenvoudig om een dynamische array te initialiseren op 0.
Syntaxis:
int *array{ new int[length]{} };
In de bovenstaande syntaxis duidt length het aantal elementen aan. Omdat we initialiseren op 0, laten we dit leeg.
We kunnen een dynamische array initialiseren met een initializer list. Laten we een voorbeeld maken dat dit demonstreert.
Voorbeeld 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;
}
Output:
Hier is een screenshot van de code:

Code‑uitleg:
- Include iostream header.
- Include std naamruimte.
- Roep
main()aan. - Declareer integer variabele
x. - Declareer dynamische array
arraymet initializer list (5 integers). Let op: geen=-operator tussen lengte en lijst. - Print tekst;
endlbetekent einde regel. - For‑lus over array‑elementen.
- Print array‑inhoud.
- Einde for‑lus.
- Return 0 bij succes.
- Einde
main().
Arrays Resizen
De lengte van een dynamische array wordt tijdens allocatie bepaald.
C++ heeft echter geen ingebouwd mechanisme om een array te resizen na allocatie.
Je kunt dit oplossen door een nieuwe array dynamisch toe te wijzen, elementen te kopiëren, en de oude array te wissen.
Let op: deze techniek is foutgevoelig, probeer het te vermijden.
Dynamisch Arrays Verwijderen
Een dynamische array moet uit het geheugen verwijderd worden zodra het doel vervuld is. Het delete-statement helpt hierbij. Het vrijgemaakte geheugen kan dan voor andere data gebruikt worden. Zelfs als je niet verwijdert, wordt het automatisch vrijgegeven bij programma‑einde.
Let op:
Om een dynamische array te verwijderen, gebruik delete[] in plaats van delete. De [] instructeert de CPU om meerdere variabelen te wissen in plaats van één. Gebruik van delete in plaats van delete[] bij een dynamische array kan problemen veroorzaken: memory leaks, data corruptie, crashes, etc.
Voorbeeld 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;
}
Output:

Hier is een screenshot van de code:

Code‑uitleg:
- Include iostream header.
- Include std naamruimte.
- Roep
main()aan. - Declareer
xennals integers. - Print prompt voor aantal getallen.
- Lees invoer naar
n. - Declareer pointer
*arr; array reserveert geheugen voornintegers. - Print prompt voor
ngetallen. - For‑lus met
xover ingevoerde getallen. - Lees getallen en sla op in
arr. - Einde for‑lus.
- Print tekst.
- For‑lus over
arrinhoud. - Print array‑waarden.
- Einde for‑lus.
- Print lege regel.
- Vrijgeef geheugen van
arr. - Return 0 bij succes.
- Einde
main().
Samenvatting:
- Gewone arrays hebben vaste grootte; niet wijzigbaar na declaratie.
- Geheugengrootte bepaald tijdens compile‑tijd.
- Dynamische arrays: grootte wijzigbaar tijdens runtime.
- Grootte bepaald tijdens runtime.
- Gedeclareerd met
new-keyword. - Vierkante haken specificeren aantal items.
- Geheugen vrijgeven met
delete-operator. - Gebruik
delete[]voor alle array‑elementen. deletezonder[]vrijgaveert maar één element.- Geen ingebouwd mechanisme om C++ arrays te resizen.
- Bij initializer list geen
=-operator gebruiken.
C Taal
- C# Arrays: Declaratie, Initialisatie en Operaties
- Arrays doorgeven aan functies in C++: een praktische gids
- Dynamische geheugentoewijzing in C: malloc, calloc, realloc en free onder de knie krijgen
- C++ Arrays Ontmaskerd: Declaratie, Initialisatie en Pointer‑Technieken
- C++ Operators Uitgelegd: Typen, Voorbeelden en Voorbeeldprogramma's
- C++ Switch‑Case Onder de Knie: Syntaxis, Gebruik en Praktische Voorbeelden
- C++ Structs Uitgelegd met een Praktisch Voorbeeld
- std::map in C++ Onder de Knie: Uitgebreide Handleiding met Code‑Voorbeelden
- Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden
- C++ Struct vs Class: Belangrijkste Verschillen, Syntaxis en Beste Gebruikssituaties
- Selection Sort in Java: Stapsgewijze voorbeeld & complete code