Wat is een dynamische array?
Een dynamische array lijkt veel op een gewone array, maar de grootte ervan kan tijdens de looptijd van het programma worden gewijzigd. DynamArray-elementen nemen een aaneengesloten geheugenblok in beslag.
Als een array eenmaal is gemaakt, kan de grootte ervan niet worden gewijzigd. Een dynamische array is echter anders. Een dynamische array kan zijn omvang vergroten, zelfs nadat deze is gevuld.
Tijdens het maken van een array wordt er een vooraf bepaalde hoeveelheid geheugen aan toegewezen. Dit is niet het geval met een dynamische array, aangezien het de geheugengrootte met een bepaalde factor vergroot wanneer dat nodig is.
In deze C ++ tutorial leer je
- Wat is een dynamische array?
- Factoren die de prestaties van dynamische arrays beïnvloeden
- Het nieuwe trefwoord
- Initialiseren van dynamisch toegewezen arrays
- Het formaat van arrays wijzigen
- Dynamisch verwijderen van arrays
Factoren die de prestaties van dynamische arrays beïnvloeden
De initiële grootte van de array en de groeifactor bepalen de prestaties. Let op de volgende punten:
- Als een array een kleine omvang en een kleine groeifactor heeft, zal het geheugen vaker opnieuw worden toegewezen. Dit zal de prestaties van de array verminderen.
- Als een array een grote omvang en een grote groeifactor heeft, heeft deze een enorme hoeveelheid ongebruikt geheugen. Hierdoor kunnen bewerkingen voor het wijzigen van de grootte langer duren. Dit zal de prestaties van de array verminderen.
Het nieuwe trefwoord
In C ++ kunnen we een dynamische array maken met het nieuwe trefwoord. Het aantal toe te wijzen items wordt gespecificeerd binnen een paar vierkante haken. De typenaam moet hieraan voorafgaan. Het gevraagde aantal items wordt toegewezen.
Syntaxis:
Het nieuwe trefwoord heeft de volgende syntaxis:
pointer_variable = new data_type;
De pointer_variable is de naam van de pointervariabele.
Het gegevenstype moet een geldig C ++ -gegevenstype zijn.
Het trefwoord retourneert vervolgens een aanwijzer naar het eerste item. Nadat we de dynamische array hebben gemaakt, kunnen we deze verwijderen met het trefwoord delete.
Voorbeeld 1:
#includeusing 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;}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Neem het iostream-headerbestand op in ons programma om de functies ervan te gebruiken.
- Neem de std-naamruimte op in ons programma om zijn klassen te gebruiken zonder deze aan te roepen.
- Roep de functie main () aan. De programmalogica moet worden toegevoegd in de body van de functie.
- Declareer twee integer-variabelen x en n.
- Druk wat tekst af op de console en vraag de gebruiker om de waarde van variabele n in te voeren.
- Lees gebruikersinvoer van het toetsenbord en wijs deze toe aan variabele n.
- Verklaar dat een array in totaal n gehele getallen bevat en wijs deze toe aan pointervariabele * arr.
- Druk een bericht af waarin de gebruiker wordt gevraagd n aantal items in te voeren.
- Gebruik een for-lus om een lusvariabele x te maken om de items te herhalen die door de gebruiker zijn ingevoerd.
- Lees de elementen die door de gebruiker zijn ingevoerd en sla ze op in de array arr.
- Einde van de body van de for-lus.
- Druk wat tekst af op de console.
- Gebruik een for-lus om een lusvariabele x te maken om de items van de array te herhalen.
- Druk de waarden in de array met de naam arr op de console af.
- Einde van de body van de for-lus.
- Het programma moet waarde teruggeven na succesvolle voltooiing.
- Einde van de hoofdtekst van de functie main ().
OPMERKING: In het bovenstaande voorbeeld mag de gebruiker elke grootte voor de array opgeven tijdens runtime. Dit betekent dat de grootte van de array tijdens runtime wordt bepaald .
Initialiseren van dynamisch toegewezen arrays
Het is gemakkelijk om een dynamische array op 0 te initialiseren.
Syntaxis:
int *array{ new int[length]{} };
In de bovenstaande syntaxis geeft de lengte het aantal elementen aan dat aan de array moet worden toegevoegd. Aangezien we de array op 0 moeten initialiseren, moet dit leeg worden gelaten.
We kunnen een dynamische array initialiseren met behulp van een initialisatie-lijst. Laten we een voorbeeld maken dat dit laat zien.
Voorbeeld 2:
#includeusing 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;}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Neem het iostream-headerbestand op in ons programma om de functies ervan te gebruiken.
- Neem de std-naamruimte op in ons programma om zijn klassen te gebruiken zonder deze op te roepen.
- Roep de functie main () aan. De programmalogica moet worden toegevoegd in de body van de functie.
- Declareer een integervariabele met de naam x.
- Declareer een dynamische array met de naam array met behulp van een initialisatie-lijst. De array bevat 5 integer-elementen. Merk op dat we de operator niet hebben gebruikt tussen de array-lengte en de initialisatie-lijst.
- Druk wat tekst af op de console. De endl is een C ++ -zoekwoord dat eindregel betekent. Het verplaatst de cursor naar de volgende zin.
- Gebruik een for-lus om de array-elementen te herhalen.
- Druk de inhoud van de array met de naam array op de console af.
- Einde van de body van de for-lus.
- Het programma moet waarde teruggeven na succesvolle voltooiing.
- Einde van de hoofdtekst van de functie main ().
Het formaat van arrays wijzigen
De lengte van een dynamische array wordt ingesteld tijdens de toewijzingstijd.
C ++ heeft echter geen ingebouwd mechanisme om de grootte van een array aan te passen nadat deze is toegewezen.
U kunt deze uitdaging echter overwinnen door dynamisch een nieuwe array toe te wijzen, de elementen te kopiëren en vervolgens de oude array te wissen.
Let op: deze techniek is foutgevoelig, probeer deze daarom te vermijden.
Dynamisch verwijderen van arrays
Een dynamische array moet uit het computergeheugen worden verwijderd zodra aan het doel is voldaan. De delete-instructie kan u hierbij helpen. De vrijgekomen geheugenruimte kan dan worden gebruikt om een andere set gegevens op te slaan. Maar zelfs als u de dynamische array niet uit het computergeheugen verwijdert, wordt deze automatisch verwijderd zodra het programma wordt beëindigd.
Notitie:
Om een dynamische array uit het computergeheugen te verwijderen, moet u delete [] gebruiken in plaats van delete. De [] instrueert de CPU om meerdere variabelen te verwijderen in plaats van één variabele. Het gebruik van delete in plaats van delete [] bij het omgaan met een dynamische array kan tot problemen leiden. Voorbeelden van dergelijke problemen zijn onder meer geheugenlekken, gegevensbeschadiging, crashes, enz.
Voorbeeld 3:
#includeusing 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;}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Neem het iostream-headerbestand op in ons programma om de functies ervan te gebruiken.
- Neem de std-naamruimte op in ons programma om zijn klassen te gebruiken zonder deze aan te roepen.
- Roep de functie main () aan. De programmalogica moet worden toegevoegd in de body van de functie.
- Declareer twee variabelen x en n van het gegevenstype integer.
- Druk wat tekst af op de console. De tekst zal de gebruiker vragen om het aantal nummers dat ze zullen invoeren te vermelden.
- Lees gebruikersinvoer van het toetsenbord. De invoerwaarde wordt toegewezen aan variabele n.
- Declareer een pointer-variabele * arr. De array arr reserveert wat geheugen om in totaal n gehele getallen op te slaan.
- Druk een bericht af op de console waarin de gebruiker wordt gevraagd n cijfers in te voeren.
- Maak een for-lus en de lusvariabele x om de getallen die door de gebruiker zijn ingevoerd, te herhalen.
- Lees de nummers die door de gebruiker zijn ingevoerd en sla ze op in de array arr.
- Einde van de body van de for-lus.
- Druk wat tekst af op de console.
- Gebruik een for-lus en de lusvariabele x om de inhoud van array arr te herhalen.
- Druk de waarden van de array arr op de console af.
- Einde van de body van de for-lus.
- Druk een lege regel af op de console.
- Maak geheugen vrij van de array-arr.
- Het programma zal waarde retourneren wanneer het met succes is voltooid.
- Einde van de hoofdtekst van de functie main ().
Overzicht:
- Normale arrays hebben een vaste grootte. U kunt hun maat niet wijzigen nadat ze zijn aangegeven.
- Met dit soort arrays wordt de geheugengrootte bepaald tijdens het compileren.
- Dynamische arrays zijn anders. Hun grootte kan tijdens runtime worden gewijzigd.
- In dynamische arrays wordt de grootte bepaald tijdens runtime.
- Dynamische arrays in C ++ worden gedeclareerd met het nieuwe trefwoord.
- We gebruiken vierkante haken om het aantal items op te geven dat in de dynamische array moet worden opgeslagen.
- Als we klaar zijn met de array, kunnen we het geheugen vrijmaken met de delete-operator.
- Gebruik de delete-operator met [] om het geheugen van alle array-elementen vrij te maken.
- Een verwijdering zonder [] maakt het geheugen van slechts één element vrij.
- Er is geen ingebouwd mechanisme om de grootte van C ++ - arrays te wijzigen.
- Om een array te initialiseren met behulp van een lijstinitialisatieprogramma, gebruiken we niet de operator .