Massiivide dünaamiline jaotamine näite abil

Lang L: none (table-of-contents):

Anonim

Mis on dünaamiline massiiv?

Dünaamiline massiiv on üsna sarnane tavalise massiiviga, kuid selle suurust saab programmi käitamise ajal muuta. DynamArray elemendid hõivavad külgnevat mäluplokki.

Kui massiiv on loodud, ei saa selle suurust muuta. Dünaamiline massiiv on aga erinev. Dünaamiline massiiv võib oma suurust laiendada ka pärast selle täitmist.

Massiivi loomise ajal eraldatakse sellele ettemääratud mälumaht. See ei kehti dünaamilise massiivi puhul, kuna see suurendab vajadusel oma mälumahtu teatud teguri võrra.

Selles C ++ õpetuses saate teada

  • Mis on dünaamiline massiiv?
  • Dünaamiliste massiivide jõudlust mõjutavad tegurid
  • Uus märksõna
  • Dünaamiliselt eraldatud massiivide initsialiseerimine
  • Massiivide suuruse muutmine
  • Massiivide dünaamiline kustutamine

Dünaamiliste massiivide jõudlust mõjutavad tegurid

Massiivi algne suurus ja kasvufaktor määravad selle jõudluse. Pange tähele järgmisi punkte:

  1. Kui massiivil on väike suurus ja väike kasvufaktor, jätkab see mälu ümberjaotamist sagedamini. See vähendab massiivi jõudlust.
  2. Kui massiivil on suur suurus ja suur kasvufaktor, on sellel tohutu hulk kasutamata mälu. Seetõttu võib suuruse muutmine võtta kauem aega. See vähendab massiivi jõudlust.

Uus märksõna

C ++ -s saame uue märksõna abil luua dünaamilise massiivi. Eraldatavate üksuste arv on täpsustatud nurksulgudes. Tüübinimi peaks sellele eelnema. Taotletud üksuste arv määratakse.

Süntaks:

Uus märksõna kasutab järgmist süntaksit:

pointer_variable = new data_type;

Pointer_variable on osuti muutuja nimi.

Data_type peab olema kehtiv C ++ andmetüüp.

Seejärel naaseb märksõna kursori esimese üksuse juurde. Pärast dünaamilise massiivi loomist saame selle kustutada märksõna kustutamine abil.

Näide 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;}

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Kaasake iostreami päisefail meie programmi, et selle funktsioone kasutada.
  2. Kaasake standardne nimeruum meie programmi, et kasutada selle klasse ilma seda kutsumata.
  3. Helistage funktsioonile main (). Programmi loogika tuleks lisada funktsiooni kehasse.
  4. Deklareerige kaks täisarvu muutujat x ja n.
  5. Trükkige konsoolile tekst, paludes kasutajal sisestada muutuja n väärtus.
  6. Kasutaja sisendi lugemine klaviatuurilt ja määramine muutujale n.
  7. Kuulutage massiiv kokku n täisarvu hoidmiseks ja määrake see kursori muutujale * arr.
  8. Printige teade, mis palub kasutajal sisestada n üksuste arvu.
  9. Kasutage a for loopi, et luua silmusemuutuja x, et kordada kasutaja sisestatud üksusi.
  10. Lugege kasutaja sisestatud elemente ja salvestage need massiivi massiivi.
  11. For silmusekeha ots.
  12. Printige konsoolile tekst.
  13. Massiivi üksuste iteratsiooniks saate luua silmusmuutuja x, kasutades loopi.
  14. Trükkige konsoolil array nimega array sisalduvad väärtused.
  15. For silmusekeha ots.
  16. Eduka lõpetamise korral peab programm tagastama väärtuse.
  17. Põhifunktsiooni () keha lõpp.

MÄRKUS. Ülaltoodud näites on kasutajal lubatud tööaja jooksul massiivi mis tahes suurus määrata. See tähendab, et massiivi suurus määratakse käituse ajal .

Dünaamiliselt eraldatud massiivide initsialiseerimine

Dünaamilise massiivi nullimiseks on lihtne.

Süntaks:

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

Ülaltoodud süntaksis tähistab pikkus massiivile lisatavate elementide arvu. Kuna peame massiivi initsialiseerima väärtusele 0, tuleks see tühjaks jätta.

Saame initsialiseerida dünaamilise massiivi, kasutades lähtestajate loendit. Koostame näite, mis seda demonstreerib.

Näide 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;}

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Kaasake iostreami päisefail meie programmi, et selle funktsioone kasutada.
  2. Kaasake meie programmi standardne nimeruum, et kasutada selle klasse ilma seda kutsumata.
  3. Helistage funktsioonile main (). Programmi loogika tuleks lisada funktsiooni kehasse.
  4. Deklareerige täisarvu muutuja nimega x.
  5. Deklareerige initsiaatorite loendi abil dünaamiline massiiv nimega massiiv. Massiiv mahutab 5 täisarvu elementi. Pange tähele, et me ei ole massiivi pikkuse ja lähtestajate loendi vahel kasutanud operaatorit .
  6. Printige konsoolile tekst. Endl on C ++ märksõna, mis tähendab lõppjoont. See viib kursori järgmise lause juurde.
  7. Massiivielementide kordamiseks kasutage a-silmus.
  8. Trükkige massiivi nimega massiivi sisu konsoolile.
  9. For silmusekeha ots.
  10. Eduka lõpetamise korral peab programm tagastama väärtuse.
  11. Põhifunktsiooni () keha lõpp.

Massiivide suuruse muutmine

Dünaamilise massiivi pikkus määratakse eraldamise ajal.

C ++-l pole aga massiivi suuruse muutmise sisseehitatud mehhanismi pärast selle eraldamist.

Sellest väljakutsest saate siiski jagu, eraldades dünaamiliselt uue massiivi, kopeerides elemendid üle ja kustutades seejärel vana massiivi.

Pange tähele: et see tehnika on altid vigadele, proovige seetõttu seda vältida.

Massiivide dünaamiline kustutamine

Dünaamiline massiiv tuleks arvuti mälust kustutada, kui selle eesmärk on täidetud. Kustutuslause aitab teil seda saavutada. Vabanenud mäluruumi saab seejärel kasutada teise andmekogumi hoidmiseks. Kuid isegi kui te ei kustuta dünaamilist massiivi arvuti mälust, kustutatakse see pärast programmi lõppemist automaatselt.

Märge:

Dünaamilise massiivi kustutamiseks arvutimälust peaksite kustutamise asemel kasutama kustutamist []. [] Annab CPU-le käsu kustutada ühe muutuja asemel mitu muutujat. Dünaamilise massiivi käsitlemisel kustutamise asemel kustutamise kasutamine võib põhjustada probleeme. Selliste probleemide näited hõlmavad mälulekkeid, andmete rikutust, krahhi jne.

Näide 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;}

Väljund:

Siin on ekraanipilt koodist:

Koodi selgitus:

  1. Kaasake iostreami päisefail meie programmi, et selle funktsioone kasutada.
  2. Kaasake standardne nimeruum meie programmi, et kasutada selle klasse ilma seda kutsumata.
  3. Helistage funktsioonile main (). Programmi loogika tuleks lisada funktsiooni kehasse.
  4. Deklareerige täisarvu andmetüübist kaks muutujat x ja n.
  5. Printige konsoolile tekst. Tekst palub kasutajal märkida sisestatavate numbrite arv.
  6. Kasutaja sisendi lugemine klaviatuurilt. Sisendväärtus määratakse muutujale n.
  7. Deklareerige kursori muutuja * arr. Massiivimassil reserveeritakse mälu kokku n täisarvu salvestamiseks.
  8. Trükkige konsoolile teade, milles palutakse kasutajal sisestada n numbrit.
  9. Kasutaja sisestatud arvude kordamiseks looge for loop ja silmusmuutuja x.
  10. Lugege kasutaja sisestatud numbreid ja salvestage need massiivi massiivi.
  11. For silmusekeha ots.
  12. Printige konsoolile tekst.
  13. Massiivi massi sisu kordamiseks kasutage silmuse a ja silmuse muutujat x.
  14. Trükkige massiivi arr väärtused konsoolile.
  15. For silmusekeha ots.
  16. Printige konsoolile tühi rida.
  17. Vabastage massiivi arr mälu.
  18. Programm tagastab väärtuse, kui see on edukalt lõpule viidud.
  19. Põhifunktsiooni () keha lõpp.

Kokkuvõte:

  • Tavalistel massiividel on kindel suurus. Nende suurust ei saa pärast deklareerimist muuta.
  • Seda tüüpi massiivide korral määratakse kompileerimise ajal mälu suurus.
  • Dünaamilised massiivid on erinevad. Nende suurust saab tööajal muuta.
  • Dünaamilistes massiivides määratakse suurus tööaja jooksul.
  • C ++ dünaamilised massiivid deklareeritakse uue märksõna abil.
  • Dünaamilises massiivis salvestatavate üksuste arvu täpsustamiseks kasutame nurksulgudes.
  • Kui massiiv on tehtud, võime mälu kustutusoperaatori abil vabastada.
  • Kõigi massiivi elementide mälu vabastamiseks kasutage kustutusoperaatorit klahviga [].
  • Ilma [] kustutamine vabastab mälu ainult ühest elemendist.
  • C ++ massiivide suuruse muutmiseks pole sisseehitatud mehhanismi.
  • Massiivi initsialiseerimiseks loendi initsiaatori abil ei kasuta me operaatorit .