Mikä on dynaaminen taulukko?
Dynaaminen taulukko on melko samanlainen kuin tavallinen taulukko, mutta sen koko on muokattavissa ohjelman ajon aikana. DynamArray-elementit vievät vierekkäisen muistilohkon.
Kun taulukko on luotu, sen kokoa ei voi muuttaa. Dynaaminen taulukko on kuitenkin erilainen. Dynaaminen taulukko voi laajentaa kokoa myös sen jälkeen, kun se on täytetty.
Taulukon luomisen aikana sille varataan ennalta määrätty määrä muistia. Näin ei ole dynaamisessa taulukossa, koska se kasvattaa muistikokoa tietyllä tekijällä, kun on tarvetta.
Tässä C ++ -opetusohjelmassa opit
- Mikä on dynaaminen taulukko?
- Dynaamisten matriisien suorituskykyyn vaikuttavat tekijät
- Uusi avainsana
- Alustetaan dynaamisesti allokoidut taulukot
- Taulukoiden koon muuttaminen
- Taulukoiden poistaminen dynaamisesti
Dynaamisten matriisien suorituskykyyn vaikuttavat tekijät
Matriisin alkuperäinen koko ja kasvutekijä määräävät sen suorituskyvyn. Ota huomioon seuraavat seikat:
- Jos matriisilla on pieni koko ja pieni kasvutekijä, se jakaa muistia uudelleen useammin. Tämä heikentää taulukon suorituskykyä.
- Jos matriisilla on suuri koko ja suuri kasvutekijä, sillä on valtava pala käyttämätöntä muistia. Tämän vuoksi koon muuttaminen voi viedä kauemmin. Tämä heikentää taulukon suorituskykyä.
Uusi avainsana
C ++: ssa voimme luoda dynaamisen taulukon käyttämällä uutta avainsanaa. Jaettavien kohteiden määrä määritetään hakasulkeissa. Tyyppinimen tulisi olla tätä edeltävä. Pyydetty määrä kohteita jaetaan.
Syntaksi:
Uusi avainsana käyttää seuraavaa syntaksia:
pointer_variable = new data_type;
Osoittimen muuttuja on osoitinmuuttujan nimi.
Data_type-arvon on oltava kelvollinen C ++ -tietotyyppi.
Avainsana palauttaa sitten osoittimen ensimmäiseen kohteeseen. Kun olet luonut dynaamisen taulukon, voimme poistaa sen käyttämällä poiston avainsanaa.
Esimerkki 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;}
Tuotos:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisällytä iostream-otsikkotiedosto ohjelmaamme käyttämään sen toimintoja.
- Sisällytä vakio nimitila ohjelmaamme, jotta voit käyttää sen luokkia kutsumatta sitä.
- Kutsu main () -toiminto. Ohjelmalogiikka tulisi lisätä funktion runkoon.
- Ilmoitetaan kaksi kokonaislukumuuttujaa x ja n.
- Tulosta konsoliin tekstiä, joka kehottaa käyttäjää syöttämään muuttujan n arvon.
- Lue käyttäjän syöttämät tiedot näppäimistöltä ja määrittämällä se muuttujalle n.
- Määritä taulukko, johon mahtuu yhteensä n kokonaislukua, ja määritetään se osoitinmuuttujaan * arr.
- Tulosta viesti, joka kehottaa käyttäjää syöttämään n määrän kohteita.
- Luo silmukan muuttuja x for for silmukka toistaaksesi käyttäjän kirjoittamat kohteet.
- Lue käyttäjän syöttämät elementit ja tallenna ne matriisiryhmään.
- For-silmukan rungon pää.
- Tulosta tekstiä konsolille.
- Luo silmukan muuttuja x for for silmukka toistaaksesi taulukon kohteet.
- Tulosta konsolissa arr nimisen taulukon arvot.
- For-silmukan rungon pää.
- Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
- Pääfunktion () rungon pää.
HUOMAUTUS: Yllä olevassa esimerkissä käyttäjä saa määrittää minkä tahansa ryhmän matriisin koko ajon aikana. Tämä tarkoittaa, että taulukon koko määritetään ajon aikana .
Alustetaan dynaamisesti allokoidut taulukot
Dynaaminen taulukko on helppo alustaa arvoon 0.
Syntaksi:
int *array{ new int[length]{} };
Edellä olevassa syntaksissa pituus merkitsee matriisiin lisättävien elementtien lukumäärää. Koska matriisi on alustettava arvoon 0, se tulisi jättää tyhjäksi.
Voimme alustaa dynaamisen taulukon käyttämällä alustusluetteloa. Luodaan esimerkki, joka osoittaa tämän.
Esimerkki 2:
#includeusing 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;}
Tuotos:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisällytä iostream-otsikkotiedosto ohjelmaamme käyttämään sen toimintoja.
- Sisällytä vakio nimitila ohjelmaamme käyttääksesi luokkia sitä kutsumatta.
- Kutsu main () -toiminto. Ohjelmalogiikka tulisi lisätä funktion runkoon.
- Ilmoita kokonaislukumuuttuja nimeltä x.
- Ilmoita dynaaminen taulukko nimeltä matriisi alustusluettelon avulla. Taulukossa on 5 kokonaislukuelementtiä. Huomaa, että emme ole käyttäneet - operaattoria taulukon pituuden ja alustusluettelon välillä.
- Tulosta tekstiä konsolille. Endl on C ++ -avainsana, joka tarkoittaa loppuriviä. Se siirtää kohdistimen seuraavaan lauseeseen.
- Käytä a for -silmukkaa toistaaksesi taulukkoelementit.
- Tulosta taulukon nimeltä taulukko sisältö konsolille.
- For-silmukan rungon pää.
- Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
- Pääfunktion () rungon pää.
Taulukoiden koon muuttaminen
Dynaamisen matriisin pituus asetetaan allokoinnin aikana.
C ++: lla ei kuitenkaan ole sisäänrakennettua mekanismia taulukon koon muuttamiseksi, kun se on varattu.
Voit kuitenkin voittaa tämän haasteen varaamalla uuden taulukon dynaamisesti, kopioimalla elementit ja poistamalla sitten vanhan taulukon.
Huomaa: että tämä tekniikka on altis virheille, yritä siten välttää sitä.
Taulukoiden poistaminen dynaamisesti
Dynaaminen taulukko on poistettava tietokoneen muistista, kun sen tarkoitus on saavutettu. Poista-lause voi auttaa sinua toteuttamaan tämän. Vapautettua muistitilaa voidaan sitten käyttää toisen tietojoukon pitämiseen. Vaikka et poista dynaamista taulukkoa tietokoneen muistista, se poistetaan automaattisesti, kun ohjelma päättyy.
Huomautus:
Jos haluat poistaa dynaamisen taulukon tietokoneen muistista, käytä poiston sijasta poista []. [] Kehottaa keskusyksikköä poistamaan useita muuttujia yhden muuttujan sijaan. Poistamisen käyttö poiston sijasta [] dynaamisen matriisin käsittelyssä voi aiheuttaa ongelmia. Esimerkkejä tällaisista ongelmista ovat muistivuodot, tietojen vioittuminen, kaatumiset jne.
Esimerkki 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;}
Tuotos:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisällytä iostream-otsikkotiedosto ohjelmaamme käyttääksesi sen toimintoja.
- Sisällytä vakio nimitila ohjelmaamme, jotta voit käyttää sen luokkia kutsumatta sitä.
- Kutsu main () -toiminto. Ohjelmalogiikka tulisi lisätä funktion runkoon.
- Ilmoitetaan kaksi muuttujaa x ja n kokonaislukutyypistä.
- Tulosta tekstiä konsolille. Teksti pyytää käyttäjää ilmoittamaan syötettävien numeroiden määrän.
- Lue käyttäjän syöttämät tiedot näppäimistöltä. Syötetty arvo osoitetaan muuttujalle n.
- Ilmoitetaan osoitinmuuttuja * arr. Taulukon matriisi varaa muistia yhteensä n kokonaisluvun tallentamiseen.
- Tulosta konsoliin viesti, joka kehottaa käyttäjää syöttämään n numeroa.
- Luo for for -silmukka ja silmukkamuuttuja x toistamaan käyttäjän syöttämät numerot.
- Lue käyttäjän syöttämät numerot ja tallenna ne matriisiryhmään.
- For-silmukan rungon pää.
- Tulosta tekstiä konsolille.
- Käytä a for -silmukkaa ja silmukan muuttujaa x iteroidaksesi taulukon matriisin sisällön.
- Tulosta matriisin matriisin arvot konsolille.
- For-silmukan rungon pää.
- Tulosta tyhjä rivi konsolille.
- Vapauta matriisiryhmän muisti.
- Ohjelma palauttaa arvon, kun se on suoritettu onnistuneesti.
- Pääfunktion () rungon pää.
Yhteenveto:
- Säännöllisillä matriiseilla on kiinteä koko. Niiden kokoa ei voi muuttaa ilmoituksen jälkeen.
- Tämän tyyppisillä matriiseilla muistikoko määritetään kääntöajan aikana.
- Dynaamiset taulukot ovat erilaisia. Niiden kokoa voidaan muuttaa ajon aikana.
- Dynaamisissa matriiseissa koko määritetään ajon aikana.
- Dynaamiset taulukot C ++: ssa ilmoitetaan uudella avainsanalla.
- Määritämme hakasulkeissa dynaamiseen ryhmään tallennettavien kohteiden määrän.
- Kun se on tehty matriisin kanssa, voimme vapauttaa muistin poistoyrityksen avulla.
- Käytä poisto-operaattoria painikkeella [] vapauttaaksesi kaikkien matriisielementtien muistin.
- Poisto ilman [] vapauttaa vain yhden elementin muistin.
- C ++ - matriisien koon muuttamiseksi ei ole sisäänrakennettua mekanismia.
- Jos haluat alustaa taulukon luettelon alustusohjelmalla, emme käytä operaattoria .