Slette matrise i C ++

Slette matrise i C ++
Denne artikkelen handler om hvordan du sletter en matrise i C++. Det inkluderer også sletting av pekerarrayen. Før det må det anføres at det er to viktigste måter å lage en rekke i C ++, som avhenger av hva slags minne som brukes. Når et program kjører, får det to minnedeler: normalt minne, som det bruker; og gratis butikk, som den kanskje ikke bruker. En matrise kan opprettes i normalt minne, eller i gratis butikk. Syntaksene for å lage en matrise i begge minnedelinger er forskjellige; Ellers er det den samme matrisen. Måtene de kan slettes på er også forskjellige.

Vanlig matrise

En matrise kan opprettes i normalt minne som følger:

char arr [] = 'p', 'q', 'r', 's', 't';

For å slette denne matrisen, bare la den gå ut av omfang.

Gratis butikk

En rekke. Et slikt utvalg kan opprettes som følger:

char *ptr = new char [5] 'p', 'q', 'r', 's', 't';

Den samme matrisen kan opprettes i C ++ hovedfunksjonen som følger:

char *ptr = new char [5];
ptr [0] = 'p'; ptr [1] = 'q'; ptr [2] = 'r'; ptr [3] = 's'; ptr [4] = 't';

Merknad om bruken av operatøren, ny, her. PTR er en peker. ARR over er også en peker, men ble nærmet fra en annen vinkel. For å slette denne matrisen, bruk operatøren, slett [] som vist nedenfor. Arrayen i gratis butikk kan ikke slettes ved å la den gå ut av omfang. Så det må slettes med Delete [] -operatøren.

Denne artikkelen illustrerer de forskjellige måtene å slette en matrise som er opprettet på de to måtene.

Artikkelinnhold

- Slette vanlig matrise

- Slette dynamisk opprettet pekerutvalg av gratis butikk

- Konklusjon

Slette vanlig matrise

For å slette et vanlig utvalg, bare la det gå ut av omfang. Selv om hovedfunksjonen () er kapitalfunksjonen til et C ++ -program, er det fortsatt en funksjon. I det følgende programmet opprettes en matrise i et nestet lokalt omfang (blokkering) i C ++ hovedfunksjonen:

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

if (1 == 1)
char arr [] = 'p', 'q', 'r', 's', 't';
cout<
// cout<retur 0;

Utgangen er, q. Det nestede omfanget er blokken til IF-konstruksjonen. Arrayen ble opprettet i denne blokken og brukt i samme blokk ved å skrive ut den andre verdien av matrisen. På slutten av blokken dør array -variabelen. Hvis kommentarindikatoren rett under blokken fjernes, vil ikke programmet bli samlet, vil en feilmelding bli utstedt. Dette vil være fordi matrisen døde på slutten av blokken.

Følgende program, illustrerer en lignende ting, men i en funksjon, kalt FN ().

#inkludere
ved hjelp av navneområdet STD;
void fn ()
char arr [] = 'p', 'q', 'r', 's', 't';
cout<
// arr [1] = 'u';
int main ()

fn ();
retur 0;

Utgangen er fortsatt, q. Hvis kommentarindikatoren rett under funksjonsblokken er fjernet, vil ikke programmet sammenstille, og en feilmelding vil bli utstedt. Dette vil være fordi matrisen døde på slutten av funksjonsblokken (omfang). Legg også merke til at tildelingen etter erklæring ikke er tillatt i det globale omfanget.

Slette dynamisk opprettet pekerutvalg av gratis butikk

Siden tildeling etter erklæring ikke er tillatt i det globale omfanget, vil matrisen i gratisbutikken bli gjort i et nestet omfang til C ++ hovedfunksjonsblokken som er illustrert nedenfor. Slett [] -operatøren brukes i det nestede omfanget, for å slette matrisen, som følger:

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

if (1 == 1)
char *ptr = new char [5] 'p', 'q', 'r', 's', 't';
cout<Slett [] PTR;
cout<
retur 0;

Utgangen er en 'q', fra den første cout -uttalelsen. Legg merke til at navnet på matrisen, PTR, som argument (parameter) av slettoperatøren. Arrayen, PTR for gratisbutikken, er erklært, brukt og slettet med "Delete [] ()" -operatøren i samme nestede omfang. Hvis det gis å gå ut av omfanget, uten å "slette [] PTR", ville det egentlig ikke bli slettet fordi det er i gratis butikk. En slik matrise må slettes i omfang. Slette med Delete [] -operatøren må gjøres for den dynamiske matrisen for å frigjøre minne (unngå minnelekkasje).

Følgende program, illustrerer en lignende ting, men i C ++ hovedfunksjonsomfanget:

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

char *ptr = new char [5] 'p', 'q', 'r', 's', 't';
cout<Slett [] PTR;
return 0;

Utgangen er fremdeles, q som den skal, med indeksen. All interessekode er direkte i C ++ hovedfunksjonen. Selv om hovedfunksjonen () er kapitalfunksjonen til et C ++ -program, er det fremdeles en funksjon av funksjonsomfanget eller funksjonsblokken.

Inkludering av bibliotekoverskrift

Som nevnt ovenfor, har ingen biblioteker blitt inkludert for bruk av de nye eller slette operatørene. Imidlertid er de nye og slette operatørene i det nye biblioteket, som implisitt er inkludert. De nye og slette operatørene er av det globale omfanget. Biblioteket kan fremdeles inkluderes som i følgende program for vanlig rekke:

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

if (1 == 1)
char arr [] = 'p', 'q', 'r', 's', 't';
cout<
// cout<return 0;

Programmet fungerer uten problemer. Biblioteket kan fremdeles inkluderes, som i følgende program, for dynamisk peker -matrise i gratis butikk:

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

if (1 == 1)
char *ptr = new char [5] 'p', 'q', 'r', 's', 't';
cout<Slett [] PTR;

return 0;

Programmet fungerer uten problemer. Merk: inkludert den nye overskriften (bibliotek) er ikke obligatorisk.

Konklusjon

For å slette et vanlig utvalg, bare la det gå ut av omfang. For å slette en dynamisk pekerutvalg av gratis butikk, bruk operatøren, slett [] arrayname, i samme omfang. Array slett operatøren, kan ha et sekund og/eller tredje argument. Imidlertid er det diskusjonen en annen gang.