C ++ Dinaminis masyvų paskirstymas su pavyzdžiu

Turinys:

Anonim

Kas yra dinaminis masyvas?

Dinaminis masyvas yra gana panašus į įprastą masyvą, tačiau jo dydį galima keisti programos vykdymo metu. „DynamArray“ elementai užima gretimą atminties bloką.

Sukūrus masyvą, jo dydžio pakeisti negalima. Tačiau dinaminis masyvas yra kitoks. Dinaminis masyvas gali išplėsti savo dydį net ir užpildęs.

Kuriant masyvą, jam priskiriamas iš anksto nustatytas atminties kiekis. Tai nėra dinaminio masyvo atvejis, nes kai reikia, jis padidina savo atminties dydį tam tikru veiksniu.

Šioje C ++ pamokoje sužinosite

  • Kas yra dinaminis masyvas?
  • Veiksniai, turintys įtakos dinaminių masyvų veikimui
  • Naujas raktinis žodis
  • Inicijuojami dinamiškai paskirstyti masyvai
  • Masyvų dydžio keitimas
  • Dinamiškai ištrinant masyvus

Veiksniai, turintys įtakos dinaminių masyvų veikimui

Masyvo pradinis dydis ir jo augimo faktorius lemia jo veikimą. Atkreipkite dėmesį į šiuos dalykus:

  1. Jei masyvas turi mažą dydį ir mažą augimo faktorių, jis ir toliau dažniau paskirstys atmintį. Tai sumažins masyvo našumą.
  2. Jei masyvas turi didelį dydį ir didelį augimo faktorių, jis turės didžiulę dalį nepanaudotos atminties. Dėl to dydžio keitimo operacijos gali užtrukti ilgiau. Tai sumažins masyvo našumą.

Naujas raktinis žodis

C ++ sistemoje galime sukurti dinaminį masyvą naudodami naują raktinį žodį. Skiriamų elementų skaičius nurodomas laužtiniuose skliaustuose. Tipo pavadinimas turėtų būti prieš tai. Prašomas elementų skaičius bus paskirtas.

Sintaksė:

Naujam raktiniam žodžiui taikoma ši sintaksė:

pointer_variable = new data_type;

„Pointer_variable“ yra rodyklės kintamojo pavadinimas.

Duomenų tipas turi būti galiojantis C ++ duomenų tipas.

Tada raktinis žodis grąžina žymeklį į pirmąjį elementą. Sukūrę dinaminį masyvą, galime jį ištrinti naudodami ištrynimo raktinį žodį.

1 pavyzdys:

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

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Įtraukite „iostream“ antraštės failą į mūsų programą, kad galėtumėte naudoti jo funkcijas.
  2. Įtraukite standartinę vardų sritį į mūsų programą, kad galėtumėte naudoti jos klases nepaskambinę.
  3. Iškvieskite pagrindinę () funkciją. Programos logika turėtų būti pridėta funkcijos tekste.
  4. Paskelbkite du sveikojo skaičiaus kintamuosius x ir n.
  5. Atsispausdinkite tekstą konsolėje, ragindami vartotoją įvesti kintamojo n vertę.
  6. Skaitykite vartotojo įvestį iš klaviatūros ir priskirkite ją kintamajam n.
  7. Paskelbkite masyvą, kuriame iš viso būtų n sveikų skaičių, ir priskirkite jį rodiklio kintamajam * arr.
  8. Išspausdinkite pranešimą, raginantį vartotoją įvesti n elementų skaičių.
  9. Naudokite „for loop“, kad sukurtumėte ciklo kintamąjį x, norėdami pakartoti vartotojo įvestus elementus.
  10. Perskaitykite vartotojo įvestus elementus ir išsaugokite juos masyvo masyve.
  11. Už kilpos kūno pabaiga.
  12. Atsispausdinkite tekstą konsolėje.
  13. Naudokite „for loop“, kad sukurtumėte kilpos kintamąjį x, norėdami pakartoti masyvo elementus.
  14. Atsispausdinkite reikšmes, esančias masyvo pavadinimu arr konsolėje.
  15. Už kilpos kūno pabaiga.
  16. Sėkmingai baigus, programa turi grąžinti vertę.
  17. Pagrindinės () funkcijos kūno pabaiga.

PASTABA: Pirmiau pateiktame pavyzdyje vartotojui leidžiama nurodyti bet kokį masyvo dydį vykdymo metu. Tai reiškia, kad masyvo dydis nustatomas vykdymo metu .

Inicijuojami dinamiškai paskirstyti masyvai

Dinaminį masyvą lengva inicijuoti iki 0.

Sintaksė:

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

Aukščiau pateiktoje sintaksėje ilgis žymi elementų, kurie bus pridėti prie masyvo, skaičių. Kadangi mes turime inicijuoti masyvą į 0, tai turėtumėte palikti tuščią.

Dinaminį masyvą galime inicializuoti naudodami inicializatorių sąrašą. Sukurkime tai demonstruojantį pavyzdį.

2 pavyzdys:

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

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Įtraukite „iostream“ antraštės failą į mūsų programą, kad galėtumėte naudoti jo funkcijas.
  2. Įtraukite standartinę vardų sritį į mūsų programą, kad galėtumėte naudoti jos klases nepaskambinę.
  3. Iškvieskite pagrindinę () funkciją. Programos logika turėtų būti pridėta funkcijos tekste.
  4. Paskelbkite sveiko skaičiaus kintamąjį, pavadintą x.
  5. Naudodamiesi inicializatorių sąrašu, paskelbkite dinaminį masyvą, pavadintą masyvu. Masyvas talpins 5 sveiko skaičiaus elementus. Atminkite, kad mes nenaudojome operatoriaus tarp masyvo ilgio ir inicializatorių sąrašo.
  6. Atsispausdinkite tekstą konsolėje. Pabaiga yra C ++ raktinis žodis, kuris reiškia pabaigos eilutę. Žymeklis perkeliamas į kitą sakinį.
  7. Naudokite „for“ kilpą, norėdami pakartoti masyvo elementus.
  8. Į konsolę išspausdinkite masyvo, pavadinto masyvu, turinį.
  9. Už kilpos kūno pabaiga.
  10. Sėkmingai baigus, programa turi grąžinti vertę.
  11. Pagrindinės () funkcijos kūno pabaiga.

Masyvų dydžio keitimas

Dinaminio masyvo ilgis nustatomas paskirstymo metu.

Tačiau C ++ neturi įmontuoto masyvo dydžio keitimo mechanizmo, kai jis bus paskirtas.

Tačiau galite įveikti šį iššūkį dinamiškai priskirdami naują masyvą, nukopijuodami elementus ir ištrindami seną masyvą.

Pastaba: kad ši technika yra linkusi į klaidas, stenkitės jos išvengti.

Dinamiškai ištrinant masyvus

Dinaminis masyvas turėtų būti ištrintas iš kompiuterio atminties, kai bus įvykdytas jo tikslas. Ištrynimo sakinys gali padėti tai pasiekti. Tada atlaisvinta atminties vieta gali būti naudojama kitam duomenų rinkiniui laikyti. Tačiau net jei neištrinsite dinaminio masyvo iš kompiuterio atminties, programa bus ištrinta automatiškai.

Pastaba:

Norėdami ištrinti dinaminį masyvą iš kompiuterio atminties, turėtumėte naudoti ištrinti [], o ne ištrinti. [] Nurodo procesoriui ištrinti kelis kintamuosius, o ne vieną kintamąjį. Jei naudojate dinaminį masyvą, vietoj ištrynimo [] naudokite ištrinti, todėl gali kilti problemų. Tokių problemų pavyzdžiai yra atminties nutekėjimas, duomenų sugadinimas, gedimai ir kt.

3 pavyzdys:

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

Išvestis:

Čia yra kodo ekrano kopija:

Kodo paaiškinimas:

  1. Įtraukite „iostream“ antraštės failą į mūsų programą, kad galėtumėte naudoti jo funkcijas.
  2. Įtraukite standartinę vardų sritį į mūsų programą, kad galėtumėte naudoti jos klases nepaskambinę.
  3. Iškvieskite pagrindinę () funkciją. Programos logika turėtų būti pridėta funkcijos tekste.
  4. Paskelbkite du sveikojo skaičiaus duomenų tipo kintamuosius x ir n.
  5. Atsispausdinkite tekstą konsolėje. Tekste bus paprašyta vartotojo nurodyti skaičių, kurį jie įves.
  6. Skaityti vartotojo įvestį iš klaviatūros. Įvesties vertė bus priskirta kintamajam n.
  7. Paskelbkite rodyklės kintamąjį * arr. Masyvo masyvas rezervuos šiek tiek atminties, kad iš viso būtų galima išsaugoti n sveikųjų skaičių.
  8. Atsispausdinkite pranešimą konsolėje, ragindami vartotoją įvesti n skaičių.
  9. Sukurkite „for“ kilpą ir ciklo kintamąjį x, kad pakartotumėte vartotojo įvestus skaičius.
  10. Perskaitykite vartotojo įvestus numerius ir išsaugokite juos masyvo masyve.
  11. Už kilpos kūno pabaiga.
  12. Atsispausdinkite tekstą konsolėje.
  13. Jei norite pakartoti masyvo masyvo turinį, naudokite „loop“ ir ciklo kintamąjį x.
  14. Atsispausdinkite konsole masyvo reikšmes.
  15. Už kilpos kūno pabaiga.
  16. Ant konsolės atspausdinkite tuščią eilutę.
  17. Atlaisvinkite masyvo arr atmintį.
  18. Sėkmingai ją baigus, programa grąžins vertę.
  19. Pagrindinės () funkcijos kūno pabaiga.

Santrauka:

  • Reguliarūs masyvai turi fiksuotą dydį. Kai deklaruosite, negalėsite keisti jų dydžio.
  • Naudojant tokio tipo masyvus, atminties dydis nustatomas kompiliavimo metu.
  • Dinaminiai masyvai yra skirtingi. Jų dydžius vykdymo metu galima keisti.
  • Dinaminėse masyvuose dydis nustatomas vykdymo metu.
  • Dinaminiai masyvai C ++ formatu deklaruojami naudojant naują raktinį žodį.
  • Mes naudojame laužtinius skliaustus, norėdami nurodyti elementų, kurie bus saugomi dinaminiame masyve, skaičių.
  • Atlikę masyvą, galime atlaisvinti atmintį naudodami ištrynimo operatorių.
  • Norėdami atlaisvinti visų masyvo elementų atmintį, naudokite ištrinimo operatorių su [].
  • Ištrynus be [], atlaisvinama tik vieno elemento atmintis.
  • Nėra įmontuoto mechanizmo, kaip pakeisti C ++ masyvų dydį.
  • Norėdami inicijuoti masyvą naudodami sąrašo inicializatorių, nenaudojame operatoriaus .