C ++ dinamična dodelitev nizov s primerom

Kazalo:

Anonim

Kaj je dinamično polje?

Dinamično polje je precej podobno običajnemu polju, vendar je njegovo velikost mogoče spremeniti med izvajanjem programa. Elementi DynamArray zasedajo sosednji blok pomnilnika.

Ko je matrika ustvarjena, njene velikosti ni več mogoče spremeniti. Vendar je dinamično polje drugačno. Dinamično polje lahko poveča svojo velikost tudi po tem, ko je napolnjeno.

Med ustvarjanjem matrike ji je dodeljena vnaprej določena količina pomnilnika. To ne velja za dinamično matriko, saj poveča velikost pomnilnika za določen faktor, kadar je to potrebno.

V tej vadnici C ++ se boste naučili

  • Kaj je dinamično polje?
  • Dejavniki, ki vplivajo na delovanje dinamičnih nizov
  • Nova ključna beseda
  • Inicializacija dinamično dodeljenih nizov
  • Spreminjanje velikosti nizov
  • Dinamično brisanje nizov

Dejavniki, ki vplivajo na delovanje dinamičnih nizov

Začetna velikost polja in faktor rasti določata njegovo zmogljivost. Upoštevajte naslednje točke:

  1. Če je polje majhno in ima majhen rastni faktor, bo pogosteje prerazporejalo pomnilnik. To bo zmanjšalo zmogljivost matrike.
  2. Če ima polje veliko velikost in velik rastni faktor, bo imelo ogromno neporabljenega pomnilnika. Zaradi tega lahko postopki spreminjanja velikosti trajajo dlje. To bo zmanjšalo zmogljivost matrike.

Nova ključna beseda

V C ++ lahko z novo ključno besedo ustvarimo dinamično matriko. Število elementov, ki jih je treba dodeliti, je določeno v parih oglatih oklepajih. Pred tem mora biti ime tipa. Dodeljeno bo zahtevano število postavk.

Sintaksa:

Nova ključna beseda ima naslednjo sintakso:

pointer_variable = new data_type;

Pointer_variable je ime spremenljivke kazalca.

Vrsta podatkovnega tipa mora biti veljaven podatkovni tip C ++.

Nato ključna beseda vrne kazalec na prvi element. Po ustvarjanju dinamičnega polja ga lahko izbrišemo s ključno besedo delete.

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

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. V naš program vključite glavo datoteke iostream v naš program, da boste lahko uporabljali njegove funkcije.
  2. V naš program vključite imenski prostor std, da lahko uporabljate njegove razrede, ne da bi ga poklicali.
  3. Pokličite glavno funkcijo. Logiko programa je treba dodati v telo funkcije.
  4. Navedite dve celoštevilčni spremenljivki x in n.
  5. Na konzolo natisnite nekaj besedila, ki bo uporabnika pozvalo, da vnese vrednost spremenljivke n.
  6. Preberite uporabniški vnos s tipkovnice in ga dodelite spremenljivki n.
  7. Deklarirajte matriko, v kateri bo skupno n celih števil, in jo dodelite kazalni spremenljivki * arr
  8. Natisnite sporočilo, v katerem morate uporabnika vnesti n števila elementov.
  9. Uporabite zanko for, da ustvarite spremenljivko zanke x za iteracijo nad elementi, ki jih vnese uporabnik.
  10. Preberite elemente, ki jih je vnesel uporabnik, in jih shranite v matriko arr.
  11. Konec telesa zanke for.
  12. Na konzolo natisnite nekaj besedila.
  13. Z zanko for ustvarite spremenljivko zanke x za iteracijo po elementih matrike.
  14. Na konzoli natisnite vrednosti v polju z imenom arr.
  15. Konec telesa zanke for.
  16. Program mora po uspešnem zaključku vrniti vrednost.
  17. Konec telesa glavne () funkcije.

OPOMBA: V zgornjem primeru lahko uporabnik med izvajanjem določi poljubno velikost polja. To pomeni, da je velikost polja določena med izvajanjem .

Inicializacija dinamično dodeljenih nizov

Dinamično matriko je enostavno inicializirati na 0.

Sintaksa:

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

V zgornji skladnji dolžina označuje število elementov, ki jih je treba dodati v matriko. Ker moramo matriko inicializirati na 0, naj ostane prazna.

Dinamično polje lahko inicializiramo s pomočjo seznama inicializatorjev. Ustvarimo primer, ki to dokazuje.

2. primer:

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

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. V naš program vključite glavo datoteke iostream v naš program, da boste lahko uporabljali njegove funkcije.
  2. V naš program vključite imenski prostor std, da lahko uporablja njegove razrede, ne da bi ga poklical.
  3. Pokličite glavno funkcijo. Logiko programa je treba dodati v telo funkcije.
  4. Navedite celoštevilčno spremenljivko z imenom x.
  5. Deklarirajte dinamično polje z imenom matrika s pomočjo seznama za inicializacijo. Matrika bo vsebovala 5 celoštevilskih elementov. Upoštevajte, da med dolžino polja in seznamom inicializatorja nismo uporabili operatorja .
  6. Na konzolo natisnite nekaj besedila. Endl je ključna beseda C ++, ki pomeni končno vrstico. Kazalec premakne na naslednji stavek.
  7. Uporabite zanko for za iteracijo po elementih matrike.
  8. Na konzolo natisnite vsebino polja z imenom matrika.
  9. Konec telesa zanke for.
  10. Program mora po uspešnem zaključku vrniti vrednost.
  11. Konec telesa glavne () funkcije.

Spreminjanje velikosti nizov

Dolžina dinamičnega polja je nastavljena med časom dodelitve.

Vendar C ++ nima vgrajenega mehanizma za spreminjanje velikosti matrike, ko je ta dodeljena.

Vendar pa lahko ta izziv premagate z dinamičnim dodeljevanjem novega polja, kopiranjem elementov in brisanjem starega polja.

Opomba: ta tehnika je nagnjena k napakam, zato se ji poskusite izogniti.

Dinamično brisanje nizov

Ko je izpolnjen njegov namen, je treba dinamično polje izbrisati iz računalniškega pomnilnika. Izjava delete vam lahko pomaga pri tem. Sproščeni pomnilniški prostor lahko nato uporabite za shranjevanje drugega nabora podatkov. Tudi če dinamičnega polja ne izbrišete iz pomnilnika računalnika, bo samodejno izbrisano, ko se program konča.

Opomba:

Če želite izbrisati dinamično matriko iz pomnilnika računalnika, namesto brisanja uporabite delete []. [] Naroči CPU, naj izbriše več spremenljivk in ne ene spremenljivke. Uporaba delete namesto delete [] pri obdelavi dinamičnega polja lahko povzroči težave. Primeri takih težav vključujejo puščanje pomnilnika, poškodbe podatkov, zrušitve itd.

3. primer:

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

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. V naš program vključite datoteko glave iostream, da boste lahko uporabljali njene funkcije.
  2. V naš program vključite imenski prostor std, da lahko uporabljate njegove razrede, ne da bi ga poklicali.
  3. Pokličite glavno funkcijo. Logiko programa je treba dodati v telo funkcije.
  4. Navedite dve spremenljivki x in n celoštevilčnega podatkovnega tipa.
  5. Na konzolo natisnite nekaj besedila. Besedilo bo od uporabnika zahtevalo, da navede število številk, ki jih bo vnesel.
  6. Preberite uporabniški vnos s tipkovnice. Vhodna vrednost bo dodeljena spremenljivki n.
  7. Navedite kazalec spremenljivke * arr. Polje arr bo rezerviralo nekaj pomnilnika za shranjevanje skupno n celih števil.
  8. Na konzolo natisnite sporočilo, v katerem bo uporabnik pozval k vnosu n številk.
  9. Ustvari zanko for in spremenljivko zanke x, da se ponovi nad števili, ki jih vnese uporabnik.
  10. Preberite številke, ki jih je vnesel uporabnik, in jih shranite v polje arr.
  11. Konec telesa zanke for.
  12. Na konzolo natisnite nekaj besedila.
  13. Uporabite zanko for in spremenljivko zanke x za ponovitev vsebine polja arr.
  14. Na konzoli natisnite vrednosti polja arr.
  15. Konec telesa zanke for.
  16. Na konzolo natisnite prazno vrstico.
  17. Sprostite pomnilnik polja arr.
  18. Program bo vrnil vrednost, ko bo uspešno zaključen.
  19. Konec telesa glavne () funkcije.

Povzetek:

  • Redni nizi imajo določeno velikost. Ko je prijavljena, ne morete spremeniti njihove velikosti.
  • Pri teh vrstah nizov se velikost pomnilnika določi med prevajanjem.
  • Dinamični nizi so različni. Njihove velikosti je mogoče med izvajanjem spreminjati.
  • V dinamičnih nizih se velikost določi med izvajanjem.
  • Dinamična polja v jeziku C ++ so prijavljena z novo ključno besedo.
  • V oglatih oklepajih določimo število elementov, ki jih je treba shraniti v dinamično polje.
  • Ko končamo z matriko, lahko sprostimo pomnilnik z operaterjem delete.
  • Uporabite operater delete z [], da osvobodite pomnilnik vseh elementov matrike.
  • Brisanje brez [] sprosti pomnilnik samo enega elementa.
  • Vgrajenega mehanizma za spreminjanje velikosti nizov C ++ ni.
  • Za inicializacijo matrike s pomočjo inicializatorja seznama ne uporabljamo operatorja .