C ++ dynamisk tildeling av matriser med eksempel

Innholdsfortegnelse:

Anonim

Hva er en dynamisk matrise?

En dynamisk matrise er ganske lik en vanlig matrise, men størrelsen kan endres under programkjøring. DynamArray-elementer opptar en sammenhengende hukommelse.

Når en matrise er opprettet, kan ikke størrelsen endres. Imidlertid er en dynamisk matrise annerledes. En dynamisk matrise kan utvide størrelsen selv etter at den er fylt.

Under opprettelsen av en matrise tildeles den en forhåndsbestemt mengde minne. Dette er ikke tilfelle med et dynamisk utvalg, da det øker minnestørrelsen med en viss faktor når det er behov.

I denne C ++ opplæringen vil du lære

  • Hva er en dynamisk matrise?
  • Faktorer som påvirker ytelsen til Dynamic Arrays
  • Det nye nøkkelordet
  • Initialiserer dynamisk tildelte matriser
  • Endre størrelse på matriser
  • Slette matriser dynamisk

Faktorer som påvirker ytelsen til Dynamic Arrays

Matrisens opprinnelige størrelse og vekstfaktor bestemmer ytelsen. Legg merke til følgende punkter:

  1. Hvis en matrise har en liten størrelse og en liten vekstfaktor, vil den fortsette å omfordele minnet oftere. Dette vil redusere ytelsen til matrisen.
  2. Hvis en matrise har stor størrelse og stor vekstfaktor, vil den ha et stort stykke ubrukt minne. På grunn av dette kan størrelse på operasjoner ta lengre tid. Dette vil redusere ytelsen til matrisen.

Det nye nøkkelordet

I C ++ kan vi lage et dynamisk utvalg ved hjelp av det nye nøkkelordet. Antall elementer som skal tildeles er spesifisert innenfor et par firkantede parenteser. Typenavnet skal gå foran dette. Det etterspurte antall varer vil bli tildelt.

Syntaks:

Det nye nøkkelordet tar følgende syntaks:

pointer_variable = new data_type;

Peker_variabel er navnet på pekervariabelen.

Data_type må være en gyldig C ++ datatype.

Nøkkelordet returnerer deretter en peker til det første elementet. Etter å ha opprettet den dynamiske matrisen, kan vi slette den ved hjelp av slett nøkkelordet.

Eksempel 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;}

Produksjon:

Her er et skjermbilde av koden:

Kode Forklaring:

  1. Inkluder iostream header-filen i programmet vårt for å bruke funksjonene.
  2. Inkluder std navneområdet i programmet vårt for å kunne bruke klassene uten å kalle det.
  3. Ring til hovedfunksjonen (). Programlogikken skal legges til i hoveddelen av funksjonen.
  4. Deklarer to heltallvariabler x og n.
  5. Skriv ut litt tekst på konsollen og be brukeren om å angi verdien til variabelen n.
  6. Les brukerinngang fra tastaturet og tilordne den til variabel n.
  7. Erklær en matrise for å inneholde totalt n heltall og tilordne den til pekervariabelen * arr.
  8. Skriv ut en melding som ber brukeren om å skrive inn et antall elementer.
  9. Bruk en for-loop til å lage en loop-variabel x for å gjenta over elementene som er angitt av brukeren.
  10. Les elementene som er skrevet inn av brukeren og lagre dem i array arr.
  11. Enden på kroppen til forløkken.
  12. Skriv ut litt tekst på konsollen.
  13. Bruk en for-loop til å lage en loop-variabel x for å gjenta over elementene i matrisen.
  14. Skriv ut verdiene som finnes i matrisen med navnet arr på konsollen.
  15. Enden på kroppen til forløkken.
  16. Programmet må returnere verdi etter vellykket gjennomføring.
  17. Slutten av kroppen til hovedfunksjonen ().

MERKNAD: I eksemplet ovenfor har brukeren lov til å spesifisere hvilken som helst størrelse for matrisen i løpet av kjøretiden. Dette betyr at størrelsen på matrisen bestemmes i løpet av kjøretiden .

Initialiserer dynamisk tildelte matriser

Det er enkelt å initialisere en dynamisk matrise til 0.

Syntaks:

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

I ovenstående syntaks angir lengden antall elementer som skal legges til matrisen. Siden vi må initialisere matrisen til 0, bør dette stå tomt.

Vi kan initialisere et dynamisk utvalg ved hjelp av en initialiseringsliste. La oss lage et eksempel som demonstrerer dette.

Eksempel 2:

#include 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;}

Produksjon:

Her er et skjermbilde av koden:

Kode Forklaring:

  1. Inkluder iostream header-filen i programmet vårt for å bruke funksjonene.
  2. Inkluder std navneområdet i programmet vårt for å bruke klassene uten å kalle det.
  3. Ring til hovedfunksjonen (). Programlogikken skal legges til i hoveddelen av funksjonen.
  4. Erklær en heltalsvariabel med navnet x.
  5. Erklær en dynamisk matrise med navnet array ved hjelp av en initialiseringsliste. Matrisen inneholder 5 heltallelementer. Vær oppmerksom på at vi ikke har brukt -operatøren mellom arraylengden og initialiseringslisten.
  6. Skriv ut litt tekst på konsollen. Endl er et C ++ nøkkelord som betyr sluttlinje. Den beveger markøren til neste setning.
  7. Bruk en for-løkke til å iterere over matriseelementene.
  8. Skriv ut innholdet i matrisen med navnet array på konsollen.
  9. Enden på kroppen til forløkken.
  10. Programmet må returnere verdi etter vellykket gjennomføring.
  11. Slutten av kroppen til hovedfunksjonen ().

Endre størrelse på matriser

Lengden på en dynamisk matrise angis i løpet av tildelingstiden.

Imidlertid har C ++ ikke en innebygd mekanisme for å endre størrelse på en matrise når den er tildelt.

Du kan imidlertid overvinne denne utfordringen ved å tildele en ny matrise dynamisk, kopiere over elementene og deretter slette den gamle matrisen.

Merk: at denne teknikken er utsatt for feil, prøv å unngå den.

Slette matriser dynamisk

En dynamisk matrise bør slettes fra dataminnet når formålet er oppfylt. Slettingsuttalelsen kan hjelpe deg med å oppnå dette. Den frigjorte minneplassen kan deretter brukes til å holde et annet datasett. Imidlertid, selv om du ikke sletter den dynamiske matrisen fra dataminnet, slettes den automatisk når programmet avsluttes.

Merk:

For å slette en dynamisk matrise fra dataminnet, bør du bruke delete [], i stedet for delete. [] Instruerer CPUen om å slette flere variabler i stedet for en variabel. Bruk av delete i stedet for delete [] når du arbeider med en dynamisk matrise kan føre til problemer. Eksempler på slike problemer inkluderer minnelekkasjer, datakorrupsjon, krasj osv.

Eksempel 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;}

Produksjon:

Her er et skjermbilde av koden:

Kode Forklaring:

  1. Ta med iostream header-filen i programmet vårt for å kunne bruke funksjonene.
  2. Inkluder std navneområdet i programmet vårt for å kunne bruke klassene uten å kalle det.
  3. Ring til hovedfunksjonen (). Programlogikken skal legges til i hoveddelen av funksjonen.
  4. Deklarer to variabler x og n for datatypen for heltall.
  5. Skriv ut litt tekst på konsollen. Teksten vil be brukeren om å oppgi antall tall de vil oppgi.
  6. Les brukerinngang fra tastaturet. Inngangsverdien vil bli tildelt variabelen n.
  7. Erklær en pekervariabel * arr. Array arr vil reservere noe minne for å lagre totalt n heltall.
  8. Skriv ut en melding på konsollen der du blir bedt om å angi n nummer.
  9. Lag en for-løkke og løkkevariabelen x for å gjenta over tallene som er angitt av brukeren.
  10. Les tallene som er oppgitt av brukeren, og lagre dem i array arr.
  11. Enden på kroppen til forløkken.
  12. Skriv ut litt tekst på konsollen.
  13. Bruk en for-løkke og løkkevariabelen x for å iterere over innholdet i array arr.
  14. Skriv ut verdiene til array arr på konsollen.
  15. Enden på kroppen til forløkken.
  16. Skriv ut en tom linje på konsollen.
  17. Frigjør minnet til matrisen arr.
  18. Programmet vil returnere verdi når det er fullført.
  19. Slutten av kroppen til hovedfunksjonen ().

Sammendrag:

  • Vanlige matriser har en fast størrelse. Du kan ikke endre størrelsen når deklarert.
  • Med denne typen matriser bestemmes minnestørrelsen i løpet av kompileringstiden.
  • Dynamiske matriser er forskjellige. Størrelsene kan endres i løpet av kjøretiden.
  • I dynamiske matriser bestemmes størrelsen i løpet av kjøretiden.
  • Dynamiske matriser i C ++ blir deklarert ved hjelp av det nye nøkkelordet.
  • Vi bruker firkantede parenteser for å spesifisere antall elementer som skal lagres i den dynamiske matrisen.
  • Når du er ferdig med matrisen, kan vi frigjøre minnet ved hjelp av sletteoperatøren.
  • Bruk sletteoperatøren med [] for å frigjøre minnet til alle matriseelementene.
  • En sletting uten [] frigjør minnet til bare et enkelt element.
  • Det er ingen innebygd mekanisme for å endre størrelse på C ++ - matriser.
  • For å initialisere en matrise ved hjelp av en listeinitialiser bruker vi ikke operatøren .