C ++ dinamiskā masīvu piešķiršana ar piemēru

Kas ir dinamiskais masīvs?

Dinamiskais masīvs ir diezgan līdzīgs parastajam masīvam, taču tā lielumu var mainīt programmas izpildes laikā. DynamArray elementi aizņem blakus esošo atmiņas bloku.

Kad masīvs ir izveidots, tā lielumu nevar mainīt. Tomēr dinamiskais masīvs ir atšķirīgs. Dinamiskais masīvs var paplašināt savu izmēru pat pēc tā aizpildīšanas.

Masīva izveides laikā tam tiek piešķirts iepriekš noteikts atmiņas apjoms. Tas neattiecas uz dinamisku masīvu, jo vajadzības gadījumā tas palielina atmiņas apjomu par noteiktu faktoru.

Šajā C ++ apmācībā jūs uzzināsit

Faktori, kas ietekmē dinamisko masīvu veiktspēju

Masīva sākotnējais lielums un tā augšanas faktors nosaka tā veiktspēju. Ņemiet vērā šādus punktus:

  1. Ja masīvam ir mazs izmērs un mazs augšanas faktors, tas turpinās pārdalīt atmiņu biežāk. Tas samazinās masīva veiktspēju.
  2. Ja masīvam ir liels izmērs un liels augšanas faktors, tam būs milzīga neizmantotas atmiņas daļa. Šī iemesla dēļ lieluma maiņas darbības var aizņemt ilgāku laiku. Tas samazinās masīva veiktspēju.

Jaunais atslēgvārds

Izmantojot C ++, mēs varam izveidot dinamisku masīvu, izmantojot jauno atslēgvārdu. Piešķirto vienumu skaits ir norādīts kvadrātiekavās. Iepriekš jānorāda tipa nosaukums. Pieprasītais vienumu skaits tiks piešķirts.

Sintakse:

Jaunajam atslēgvārdam ir šāda sintakse: | _+_ |

Pointer_variable ir rādītāja mainīgā nosaukums.

Datu tipam ir jābūt derīgam C ++ datu tipam.

Pēc tam atslēgvārds atgriež rādītāju uz pirmo vienumu. Pēc dinamiskā masīva izveides mēs varam to izdzēst, izmantojot dzēšanas atslēgvārdu.

1. piemērs:

 pointer_variable = new data_type; 

Izeja:

Šeit ir koda ekrānuzņēmums:

Koda skaidrojums:

  1. Iekļaujiet iostream galvenes failu mūsu programmā, lai izmantotu tās funkcijas.
  2. Iekļaujiet standarta programmu mūsu programmā, lai izmantotu tās klases, to neizsaucot.
  3. Izsauciet galveno () funkciju. Programmas loģika jāpievieno funkcijas pamattekstā.
  4. Deklarējiet divus veselu skaitļu mainīgos x un n.
  5. Izdrukājiet konsolē tekstu, kas liek lietotājam ievadīt mainīgā n vērtību.
  6. Izlasiet lietotāja ievadīto informāciju no tastatūras un piešķiriet to mainīgajam n.
  7. Deklarējiet masīvu, kurā kopā ir n veseli skaitļi, un piešķiriet to rādītāja mainīgajam *arr.
  8. Izdrukājiet ziņojumu, kurā lietotājs tiek aicināts ievadīt n vienumu skaitu.
  9. Izmantojiet cilpu for, lai izveidotu cilpas mainīgo x, lai atkārtotu lietotāja ievadītos vienumus.
  10. Izlasiet lietotāja ievadītos elementus un saglabājiet tos masīvā arr.
  11. For cilpas korpusa beigas.
  12. Izdrukājiet tekstu konsolē.
  13. Izmantojiet cilpu for, lai izveidotu cilpas mainīgo x, lai atkārtotu masīva vienumus.
  14. Izdrukājiet konsoles vērtības, kas ietvertas masīvā ar nosaukumu arr.
  15. For cilpas korpusa beigas.
  16. Pēc veiksmīgas pabeigšanas programmai ir jāatgriež vērtība.
  17. Galvenās () funkcijas pamatteksta beigas.

PIEZĪME. Iepriekš minētajā piemērā lietotājam ir atļauts norādīt jebkura izmēra masīvu izpildes laikā. Tas nozīmē, ka masīva lielums tiek noteikts izpildlaika laikā .

Dinamiski piešķirtu masīvu inicializēšana

Dinamisku masīvu ir viegli inicializēt līdz 0.

Sintakse:

 #include using namespace std; int main() { int x, n; cout << 'Enter the number of items:' <>n; int *arr = new int(n); cout << 'Enter ' << n << ' items' << endl; for (x = 0; x> arr[x]; } cout << 'You entered: '; for (x = 0; x < n; x++) { cout << arr[x] << ' '; } return 0; } 

Iepriekš minētajā sintaksē garums apzīmē masīvam pievienojamo elementu skaitu. Tā kā mums ir jāinicializē masīvs uz 0, tas jāatstāj tukšs.

Mēs varam inicializēt dinamisku masīvu, izmantojot inicializētāju sarakstu. Izveidosim piemēru, kas to parāda.

2. piemērs:

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

Izeja:

Šeit ir koda ekrānuzņēmums:

Koda skaidrojums:

  1. Iekļaujiet iostream galvenes failu mūsu programmā, lai izmantotu tās funkcijas.
  2. Iekļaujiet standarta programmu mūsu programmā, lai izmantotu tās klases, to neizsaucot.
  3. Izsauciet galveno () funkciju. Programmas loģika jāpievieno funkcijas pamattekstā.
  4. Deklarējiet veselu skaitļu mainīgo ar nosaukumu x.
  5. Deklarējiet dinamisku masīvu ar nosaukumu masīvs, izmantojot inicializētāju sarakstu. Masīvā būs 5 veseli skaitļi. Ņemiet vērā, ka mēs neesam izmantojuši operatoru '=' starp masīva garumu un inicializētāju sarakstu.
  6. Izdrukājiet tekstu konsolē. Endl ir C ++ atslēgvārds, kas nozīmē beigu rindu. Tas pārvieto kursoru uz nākamo teikumu.
  7. Izmantojiet cilpu for, lai atkārtotu masīva elementus.
  8. Izdrukājiet masīvā nosaukto masīvu saturu konsolē.
  9. For cilpas korpusa beigas.
  10. Pēc veiksmīgas pabeigšanas programmai ir jāatgriež vērtība.
  11. Galvenās () funkcijas pamatteksta beigas.

Masīvu izmēru maiņa

Dinamiskā masīva garums tiek noteikts piešķiršanas laikā.

Tomēr C ++ nav iebūvēta mehānisma masīva izmēru maiņai, tiklīdz tas ir piešķirts.

Tomēr jūs varat pārvarēt šo izaicinājumu, dinamiski piešķirot jaunu masīvu, kopējot pa elementiem un pēc tam izdzēšot veco masīvu.

Piezīme: šī tehnika ir pakļauta kļūdām, tāpēc mēģiniet to izvairīties.

Masīvu dinamiska dzēšana

Dinamiskais masīvs jāizdzēš no datora atmiņas, tiklīdz tā mērķis ir izpildīts. Paziņojums par dzēšanu var jums palīdzēt. Atbrīvoto atmiņas vietu pēc tam var izmantot, lai glabātu citu datu kopu. Tomēr, pat ja neizdzēšat dinamisko masīvu no datora atmiņas, tas tiks automātiski izdzēsts, tiklīdz programma tiks pārtraukta.

Piezīme:

Lai no datora atmiņas izdzēstu dinamisku masīvu, dzēšanas vietā izmantojiet dzēšanu []. [] Norāda CPU dzēst vairākus mainīgos, nevis vienu mainīgo. Dzēšanas izmantošana dzēšanas [] vietā, strādājot ar dinamisku masīvu, var radīt problēmas. Šādu problēmu piemēri ir atmiņas noplūde, datu bojājumi, avārijas utt.

3. piemērs:

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

Izeja:

Šeit ir koda ekrānuzņēmums:

Koda skaidrojums:

  1. Iekļaujiet iostream galvenes failu mūsu programmā, lai izmantotu tās funkcijas.
  2. Iekļaujiet standarta programmu mūsu programmā, lai izmantotu tās klases, to neizsaucot.
  3. Izsauciet galveno () funkciju. Programmas loģika jāpievieno funkcijas pamattekstā.
  4. Deklarējiet divus veselu skaitļu datu tipa mainīgos x un n.
  5. Izdrukājiet tekstu konsolē. Teksts prasīs lietotājam norādīt ievadīto numuru skaitu.
  6. Lasiet lietotāja ievadīto informāciju no tastatūras. Ievades vērtība tiks piešķirta mainīgajam n.
  7. Deklarēt rādītāja mainīgo *arr. Masīvs arr rezervēs nedaudz atmiņas, lai kopā saglabātu n veselus skaitļus.
  8. Izdrukājiet ziņojumu konsolē, aicinot lietotāju ievadīt n ciparus.
  9. Izveidojiet cilpu for un cilpas mainīgo x, lai atkārtotu lietotāja ievadītos skaitļus.
  10. Izlasiet lietotāja ievadītos skaitļus un saglabājiet tos masīvā arr.
  11. For cilpas korpusa beigas.
  12. Izdrukājiet tekstu konsolē.
  13. Izmantojiet cilpu for un cilpas mainīgo x, lai atkārtotu masīva arr saturu.
  14. Izdrukājiet konsolē masīva arr vērtības.
  15. For cilpas korpusa beigas.
  16. Izdrukājiet uz konsoles tukšu rindu.
  17. Atbrīvojiet masīva arr atmiņu.
  18. Programma atgriezīs vērtību, kad tā būs veiksmīgi pabeigta.
  19. Galvenās () funkcijas pamatteksta beigas.

Kopsavilkums:

  • Parastajiem masīviem ir noteikts izmērs. Pēc deklarēšanas to lielumu nevar mainīt.
  • Izmantojot šāda veida masīvus, atmiņas lielums tiek noteikts apkopošanas laikā.
  • Dinamiskie masīvi ir dažādi. To izmērus var mainīt darbības laikā.
  • Dinamiskajos masīvos izmērs tiek noteikts izpildlaika laikā.
  • C ++ dinamiskie masīvi tiek deklarēti, izmantojot jauno atslēgvārdu.
  • Mēs izmantojam kvadrātiekavas, lai norādītu dinamiskajā masīvā saglabāto vienumu skaitu.
  • Kad masīvs ir pabeigts, mēs varam atbrīvot atmiņu, izmantojot dzēšanas operatoru.
  • Izmantojiet dzēšanas operatoru ar [], lai atbrīvotu visu masīva elementu atmiņu.
  • Dzēšana bez [] atbrīvo tikai viena elementa atmiņu.
  • Nav iebūvēta mehānisma, lai mainītu C ++ masīvu izmērus.
  • Lai inicializētu masīvu, izmantojot saraksta inicializētāju, mēs neizmantojam operatoru '='.