Hvordan slette en todimensjonal matrise i C ++

Hvordan slette en todimensjonal matrise i C ++
En 2D -matrise kan opprettes på to måter: å bruke det normale minnet eller bruke gratisbutikken. Når et program kjører, har det sin normale del av minne og ekstra minne å bruke. Programmet er ikke forpliktet til å bruke det ekstra minnet som heter Free Store. Programmet ville skape en vanlig 2D -matrise i normalt minne. Hvis programmet skal lage den samme 2D -matrisen i gratisbutikken, vil det måtte gjøre det dynamisk. Syntaksene for å lage den todimensjonale matrisen i en av slags minne, er forskjellige. For å ha slettet en vanlig 2D -matrise, bare la den gå ut av omfang. For å slette en 2D -matrise, opprettet i gratis butikk, bruk Delete [] -operatøren på riktig måte.

Opprette vanlig 2D -matrise

Følgende uttalelse oppretter en vanlig 2D -matrise:

String arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"Ba", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"DA", "DB", "DC", "DD", "de",
"Ea", "eb", "ec", "ed", "ee";

Hvis denne matrisen opprettes i det globale omfanget, kan den ikke brukes (e.g. tildelte en elementverdi) i det globale omfanget. Imidlertid kan det få noen av elementene tildelt en verdi i de andre omfangene.

For å ha slettet denne matrisen, bare la den gå ut av omfang. Hvis det ble opprettet i et annet omfang enn det globale omfanget, ville det gå ut av omfang på slutten av blokken (). Hvis det ble opprettet i det globale omfanget, ville det bare gå ut av omfanget på slutten av programmet.

Gratis butikk 2D -matrise

Følgende uttalelse viser hvordan ovennevnte matrise, men med et annet pekernavn kan opprettes dynamisk i gratis butikk:

String (*ptr2d) [5] = ny streng [5] [5] "Aa", "ab", "ac", "ad", "ae",
"Ba", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"DA", "DB", "DC", "DD", "de",
"Ea", "eb", "ec", "ed", "ee";

Merk hvordan 2D -matrisen er opprettet med den nye operatøren. Navnet på matrisen er PTR2D.

Hvis denne matrisen opprettes i det globale omfanget, kan den ikke brukes (e.g. tildelte en elementverdi) i det globale omfanget. Imidlertid kan det ha noen av sine elementer, tildelt en verdi i de andre omfangene.

For å slette denne matrisen, bruk Delete [] -operatøren, som vist nedenfor. Arrayen i gratis butikk kan ikke virkelig slettes ved å la den gå ut av omfang. Det må slettes med Delete [] -operatøren, i omfanget, for å frigjøre minne.

Artikkelinnhold

- INNLEDNING - Se ovenfor

- Slette en 2D -vanlig matrise

- Slette dynamisk opprettet 2D -pekerutvalg av gratis butikk

- Konklusjon

Slette en 2D -vanlig matrise

En todimensjonal ordinær matrise blir slettet ved bare å la den gå ut av omfang. Følgende program illustrerer dette med et nestet omfang:

#inkludere
ved hjelp av navneområdet STD;
int main ()

if (1 == 1)
String arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"Ba", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"DA", "DB", "DC", "DD", "de",
"Ea", "eb", "ec", "ed", "ee";
cout<< arr2D[1][1] <
// cout<< arr2D[1][1] <retur 0;

Utgangen er, BB. If-konstruksjonen har en blokk som er det nestede omfanget. Arrayen stopper eksisterende på slutten av blokken. Det er en kommentarindikator, rett under blokken, i programmet. Hvis det fjernes, vil ikke programmet sammenstille, og en feilmelding vil bli utstedt. Dette er resultatet av at 2D -matrisen er død på slutten av blokken.

I det følgende programmet dør den ordinære 2D -arrayen som er erklært i funksjonsbodet, på slutten av funksjonsblokken:

#inkludere
ved hjelp av navneområdet STD;
void fn ()
String arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"Ba", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"DA", "DB", "DC", "DD", "de",
"Ea", "eb", "ec", "ed", "ee";
cout<< arr2D[1][1] <
// cout<< arr2D[1][1] <int main ()

fn ();
retur 0;

Utgangen er fortsatt, BB. Det er en kommentarindikator rett under funksjonsblokken i programmet. Hvis det fjernes, vil ikke programmet sammenstille, og en feilmelding vil bli utstedt. Dette er resultatet av at 2D -matrisen er død på slutten av blokken. Husk også at tildeling av en verdi til et 2D -element, etter erklæring, ikke er tillatt i det globale omfanget.

Slette dynamisk opprettet 2D -pekerutvalg av gratis butikk

Oppdrag etter erklæring er ikke tillatt i det globale omfanget. Så det er praktisk å ha en 2D -array -erklæring, i et nestet omfang, i C ++ hovedfunksjon, av pedagogiske grunner.

En todimensjonal matrise, erklært i skjemaet ovenfor, blir slettet med syntaks, "Slett [] 2Darray". Denne slettingen må finne sted i sitt rom for å frigjøre hukommelse og for å unngå hukommelseslekkasje. Følgende program illustrerer dette, med et nestet omfang:

#inkludere
ved hjelp av navneområdet STD;
int main ()

if (1 == 1)
String (*ptr2d) [5] = ny streng [5] [5] "Aa", "ab", "ac", "ad", "ae",
"Ba", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"DA", "DB", "DC", "DD", "de",
"Ea", "eb", "ec", "ed", "ee";
cout<< ptr2D[0][0] <slett [] ptr2d;
cout<< ptr2D[0][0] <
retur 0;

Utgangen er, AA, fra PTR2D [0] [0]. Etter sletting returnerer ptr2d [0] [0] ingenting. Selv om de andre elementene som PTR2D [1] [1] fortsatt vil returnere en verdi, anses matrisen som er slettet.

2D gratis butikk matrise som peker-til-peker

En 2D-matrise kan opprettes som en peker-til-peker. I dette tilfellet må alle radene slettes først før den endimensjonale matrisen gjenstår, blir slettet. Følgende program illustrerer dette i C ++ hovedfunksjonen:

#inkludere
ved hjelp av navneområdet STD;
int main ()

streng ** ptr2d = ny streng*[3]; // ingen rader
ptr2d [0] = ny streng [5];
ptr2d [0] [0] = "aa"; ptr2d [0] [1] = "ab"; ptr2d [0] [2] = "Ac"; ptr2d [0] [3] = "AD";
ptr2d [1] = ny streng [5];
ptr2d [1] [0] = "ba"; ptr2d [1] [1] = "BB"; ptr2d [1] [2] = "BC"; ptr2d [1] [3] = "BD";
ptr2d [2] = ny streng [5];
ptr2d [2] [0] = "Ca"; ptr2d [2] [1] = "CB"; ptr2d [2] [2] = "CC"; ptr2d [2] [3] = "CD";
cout<< ptr2D[1][1] <// gratis hver underarrang (rad)
for (int i = 0; i< 3; ++i)
slett [] ptr2d [i];

slett [] ptr2d; // gratis utvalget av pekere
cout<< ptr2D[1][1] <retur 0;

Utgangen er BB før du sletter. Etter slettet er returverdien fra Ptr2d [1] [1] ingenting.

Nå er denne pekeren 2D -matrisen i gratis butikk en peker en dimensjonal matrise, av pekermatriser. Så for å slette 2D-matrisen i gratis butikk, må alle radene slettes først med sletting [] før den viktigste endimensjonale pekerarrayen blir slettet. Dette bruker Delete [] operatørskjema for en 2D -matrise i gratis butikk.

Inkludering av bibliotek

Den nye og slette operatøren er faktisk definert på biblioteket. Imidlertid er dette biblioteket valgfritt.

Konklusjon

For å slette en 2D vanlig matrise, bare la den gå ut av omfang. Hvis 2D -matrisen er i gratis butikk, må den slettes med Delete [] -operatøren for å fritt minne i omfanget som den er erklært. Hvis 2D -matrisen i gratis butikk ble opprettet med en konvensjonell syntaks, ville et enkelt "slett [] 2DarrayName" gjøre for sletting. Hvis den ble opprettet som en peker-til-peker, må radene bli slettet først med “Delete [] 2DarrayName [i]” og deretter den gjenværende 1D-matrisen (uten elementer), bli slettet med “Delete [] 2DarrayName ”.