Hvad er en dynamisk matrix?
Et dynamisk array er meget lig et almindeligt array, men dets størrelse kan ændres under programkørsel. DynamArray-elementer optager en sammenhængende hukommelsesblok.
Når en matrix er oprettet, kan dens størrelse ikke ændres. Et dynamisk array er dog anderledes. En dynamisk matrix kan udvide sin størrelse, selv efter at den er udfyldt.
Under oprettelsen af en matrix tildeles den en forudbestemt mængde hukommelse. Dette er ikke tilfældet med et dynamisk array, da det øger hukommelsesstørrelsen med en bestemt faktor, når der er behov for det.
I denne C ++ tutorial lærer du
- Hvad er en dynamisk matrix?
- Faktorer, der påvirker ydeevnen for dynamiske arrays
- Det nye nøgleord
- Initialisering af dynamisk tildelte arrays
- Ændring af størrelse på arrays
- Sletning af arrays dynamisk
Faktorer, der påvirker ydeevnen for dynamiske arrays
Arrayets oprindelige størrelse og dens vækstfaktor bestemmer dens ydeevne. Bemærk følgende punkter:
- Hvis en matrix har en lille størrelse og en lille vækstfaktor, fortsætter den med at omfordele hukommelsen oftere. Dette reducerer arrayets ydeevne.
- Hvis en matrix har en stor størrelse og en stor vækstfaktor, vil den have et stort stykke ubrugt hukommelse. På grund af dette kan størrelse på handlinger tage længere tid. Dette reducerer arrayets ydeevne.
Det nye nøgleord
I C ++ kan vi oprette et dynamisk array ved hjælp af det nye nøgleord. Antallet af emner, der skal tildeles, angives inden for et par firkantede parenteser. Typenavnet skal gå forud for dette. Det ønskede antal varer tildeles.
Syntaks:
Det nye søgeord tager følgende syntaks:
pointer_variable = new data_type;
Pointer_variable er navnet på markørvariablen.
Datatypen skal være en gyldig C ++ - datatype.
Nøgleordet returnerer derefter en markør til det første element. Efter oprettelse af det dynamiske array kan vi slette det ved hjælp af slette nøgleordet.
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;}
Produktion:
Her er et screenshot af koden:
Kode Forklaring:
- Inkluder iostream header-filen i vores program for at bruge dens funktioner.
- Inkluder std navneområdet i vores program for at kunne bruge dets klasser uden at kalde det.
- Ring til hovedfunktionen (). Programlogikken skal tilføjes inden for funktionens brødtekst.
- Erklær to heltalsvariabler x og n.
- Udskriv noget tekst på konsollen, der beder brugeren om at indtaste værdien af variablen n.
- Læs brugerinput fra tastaturet og tildel det til variabel n.
- Erklær, at en matrix indeholder i alt n heltal, og tildeler den til markørvariablen * arr.
- Udskriv en besked, der beder brugeren om at indtaste et antal elementer.
- Brug en for-loop til at oprette en loop-variabel x for at gentage de emner, der er indtastet af brugeren.
- Læs elementerne, der er indtastet af brugeren, og gem dem i array arr.
- Slutningen af for-sløjfens krop.
- Udskriv tekst på konsollen.
- Brug en for-loop til at oprette en loop-variabel x til at gentage elementerne i arrayet.
- Udskriv værdierne i arrayet med navnet arr på konsollen.
- Slutningen af for-sløjfens krop.
- Programmet skal returnere værdi efter vellykket afslutning.
- Slutningen af hovedfunktionens () krop.
BEMÆRK: I ovenstående eksempel har brugeren lov til at angive en hvilken som helst størrelse for arrayet i løbet af kørselstiden. Dette betyder, at arrayets størrelse bestemmes under kørsel .
Initialisering af dynamisk tildelte arrays
Det er let at initialisere et dynamisk array til 0.
Syntaks:
int *array{ new int[length]{} };
I ovenstående syntaks angiver længden antallet af elementer, der skal føjes til arrayet. Da vi skal initialisere arrayet til 0, skal dette stå tomt.
Vi kan initialisere et dynamisk array ved hjælp af en initialiseringsliste. Lad os oprette et eksempel, der demonstrerer dette.
Eksempel 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;}
Produktion:
Her er et screenshot af koden:
Kode Forklaring:
- Inkluder iostream header-filen i vores program for at bruge dens funktioner.
- Inkluder std navneområdet i vores program for at bruge dets klasser uden at kalde det.
- Ring til hovedfunktionen (). Programlogikken skal tilføjes inden for funktionens brødtekst.
- Erklær en heltalsvariabel med navnet x.
- Erklær et dynamisk array med navnet array ved hjælp af en initialiseringsliste. Arrayet indeholder 5 heltalselementer. Bemærk, at vi ikke har brugt operatoren mellem matrixlængden og initialiseringslisten.
- Udskriv tekst på konsollen. Endl er et C ++ nøgleord, der betyder slutlinie. Den flytter markøren til næste sætning.
- Brug en for-løkke til at gentage array-elementerne.
- Udskriv indholdet af det array, der hedder array på konsollen.
- Slutningen af for-sløjfens krop.
- Programmet skal returnere værdi efter vellykket afslutning.
- Slutningen af hovedfunktionens () krop.
Ændring af størrelse på arrays
Længden af et dynamisk array indstilles under tildelingstiden.
C ++ har dog ikke en indbygget mekanisme til at ændre størrelsen på et array, når det er blevet tildelt.
Du kan dog overvinde denne udfordring ved at tildele en ny matrix dynamisk, kopiere over elementerne og derefter slette den gamle matrix.
Bemærk: at denne teknik er tilbøjelig til fejl, så prøv at undgå den.
Sletning af arrays dynamisk
Et dynamisk array skal slettes fra computerens hukommelse, når dets formål er opfyldt. Sletningserklæringen kan hjælpe dig med at opnå dette. Det frigjorte hukommelsesrum kan derefter bruges til at rumme et andet datasæt. Selvom du ikke sletter det dynamiske array fra computerens hukommelse, slettes det dog automatisk, når programmet afsluttes.
Bemærk:
For at slette et dynamisk array fra computerens hukommelse skal du bruge delete [] i stedet for delete. [] Instruerer CPU'en om at slette flere variabler i stedet for en variabel. Brug af sletning i stedet for sletning [], når der behandles et dynamisk array, kan resultere i problemer. Eksempler på sådanne problemer inkluderer hukommelseslækage, datakorruption, nedbrud 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;}
Produktion:
Her er et screenshot af koden:
Kode Forklaring:
- Inkluder iostream header-filen i vores program for at kunne bruge dens funktioner.
- Inkluder std navneområdet i vores program for at kunne bruge dets klasser uden at kalde det.
- Ring til hovedfunktionen (). Programlogikken skal tilføjes inden for funktionens brødtekst.
- Erklær to variabler x og n for heltal datatypen.
- Udskriv tekst på konsollen. Teksten beder brugeren om at angive antallet af numre, de vil indtaste.
- Læs brugerinput fra tastaturet. Inputværdien tildeles variablen n.
- Erklare en markørvariabel * arr. Array arr vil reservere noget hukommelse til at gemme i alt n heltal.
- Udskriv en besked på konsollen, der beder brugeren om at indtaste n numre.
- Opret en for-loop og loop-variablen x for at gentage de numre, der er indtastet af brugeren.
- Læs de numre, der er indtastet af brugeren, og gem dem i array arr.
- Slutningen af for-sløjfens krop.
- Udskriv tekst på konsollen.
- Brug en for-loop og loop-variablen x til at gentage indholdet af array arr.
- Udskriv værdierne for array arr på konsollen.
- Slutningen af for-sløjfens krop.
- Udskriv en tom linje på konsollen.
- Frigør hukommelsen for array arr.
- Programmet returnerer værdi, når det er afsluttet med succes.
- Slutningen af hovedfunktionens () krop.
Resumé:
- Regelmæssige arrays har en fast størrelse. Du kan ikke ændre deres størrelse, når de er deklareret.
- Med disse typer arrays bestemmes hukommelsesstørrelsen i løbet af kompileringstiden.
- Dynamiske arrays er forskellige. Deres størrelser kan ændres i løbet af løbetiden.
- I dynamiske arrays bestemmes størrelsen under kørselstid.
- Dynamiske arrays i C ++ erklæres ved hjælp af det nye nøgleord.
- Vi bruger firkantede parenteser til at angive antallet af emner, der skal gemmes i det dynamiske array.
- Når du er færdig med arrayet, kan vi frigøre hukommelsen ved hjælp af sletteoperatoren.
- Brug sletteoperatoren med [] til at frigøre hukommelsen for alle matrixelementer.
- En sletning uden [] frigør kun hukommelsen for et enkelt element.
- Der er ingen indbygget mekanisme til at ændre størrelse på C ++ - arrays.
- For at initialisere et array ved hjælp af en listeinitialiser bruger vi ikke operatoren .