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 nav gadījumā ar dinamisko masīvu, jo, ja nepieciešams, tas palielina atmiņas apjomu par noteiktu faktoru.
Šajā C ++ apmācībā jūs uzzināsiet
- Kas ir dinamiskais masīvs?
- Faktori, kas ietekmē dinamisko masīvu darbību
- Jaunais atslēgvārds
- Dinamiski piešķirto masīvu inicializēšana
- Masīvu izmēru maiņa
- Dinamiski masīvu dzēšana
Faktori, kas ietekmē dinamisko masīvu darbību
Masīva sākotnējais lielums un tā pieauguma faktors nosaka tā veiktspēju. Ievērojiet šādus punktus:
- Ja masīvam ir mazs izmērs un mazs pieauguma faktors, tas turpinās biežāk pārdalīt atmiņu. Tas samazinās masīva veiktspēju.
- Ja masīvam ir liels izmērs un augšanas faktors, tam būs milzīgs neizmantotās atmiņas gabals. Tādēļ izmēru maiņas darbības var aizņemt vairāk laika. Tas samazinās masīva veiktspēju.
Jaunais atslēgvārds
Programmā C ++ mēs varam izveidot dinamisku masīvu, izmantojot jauno atslēgvārdu. Piešķiramo vienumu skaits ir norādīts kvadrātiekavās. Tipa nosaukumam vajadzētu būt pirms tā. Tiks piešķirts pieprasītais vienumu skaits.
Sintakse:
Jaunajam atslēgvārdam ir šāda sintakse:
pointer_variable = new data_type;
Pointer_variable ir rādītāja mainīgā nosaukums.
Data_type ir jābūt derīgam C ++ datu tipam.
Pēc tam atslēgvārds atgriež rādītāju pirmajam vienumam. Pēc dinamiskā masīva izveides mēs to varam izdzēst, izmantojot dzēšanas atslēgvārdu.
1. piemērs:
#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;}
Izeja:
Šeit ir koda ekrānuzņēmums:
Koda skaidrojums:
- Iekļaujiet iostream galvenes failu mūsu programmā, lai izmantotu tā funkcijas.
- Iekļaujiet standarta nosaukumu telpu mūsu programmā, lai izmantotu tās klases, to neizsaucot.
- Izsauciet galveno () funkciju. Programmas loģika jāpievieno funkcijas pamattekstā.
- Pasludiniet divus veselu skaitļu mainīgos x un n.
- Konsolē izdrukājiet tekstu, aicinot lietotāju ievadīt mainīgā n vērtību.
- Lasiet lietotāja ievadi no tastatūras un piešķiriet to mainīgajam n.
- Pasludiniet masīvu, kurā kopā ir n veseli skaitļi, un piešķirot to rādītāja mainīgajam * arr.
- Izdrukājiet ziņojumu, kas mudina lietotāju ievadīt n vienumu skaitu.
- Izmantojiet for for ciklu, lai izveidotu cilpas mainīgo x, lai atkārtotu lietotāja ievadītos vienumus.
- Izlasiet lietotāja ievadītos elementus un saglabājiet tos masīva masīvā.
- For cilpas korpusa beigas.
- Izdrukājiet tekstu konsolē.
- Izmantojiet for for ciklu, lai izveidotu cilpas mainīgo x, lai atkārtotu masīva vienumus.
- Konsolē izdrukājiet masīvā ar nosaukumu arr norādītās vērtības.
- For cilpas korpusa beigas.
- Pēc sekmīgas pabeigšanas programmai ir jāatgriež vērtība.
- Galvenās () funkcijas ķermeņa beigas.
PIEZĪME. Iepriekš minētajā piemērā lietotājam ir atļauts norādīt jebkuru masīva izmēru darbības laikā. Tas nozīmē, ka masīva lielums tiek noteikts izpildlaika laikā .
Dinamiski piešķirto masīvu inicializēšana
Dinamisko masīvu ir viegli inicializēt līdz 0.
Sintakse:
int *array{ new int[length]{} };
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 dinamisko masīvu, izmantojot inicializētāju sarakstu. Izveidosim piemēru, kas to demonstrē.
2. piemērs:
#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;}
Izeja:
Šeit ir koda ekrānuzņēmums:
Koda skaidrojums:
- Iekļaujiet iostream galvenes failu mūsu programmā, lai izmantotu tā funkcijas.
- Iekļaujiet standarta nosaukumvietu mūsu programmā, lai izmantotu tās klases, to neizsaucot.
- Izsauciet galveno () funkciju. Programmas loģika jāpievieno funkcijas pamattekstā.
- Paziņojiet vesela skaitļa mainīgo ar nosaukumu x.
- Deklarējiet dinamisko masīvu ar nosaukumu masīvs, izmantojot inicializētāju sarakstu. Masīvā būs 5 veselu skaitļu elementi. Ņemiet vērā, ka mēs neesam izmantojuši operatoru starp masīva garumu un inicializētāju sarakstu.
- Izdrukājiet tekstu konsolē. Endl ir C ++ atslēgvārds, kas nozīmē beigu līniju. Tas pārvieto kursoru uz nākamo teikumu.
- Izmantojiet a for ciklu, lai atkārtotu masīva elementus.
- Konsolē izdrukājiet masīva ar nosaukumu masīvs saturu.
- For cilpas korpusa beigas.
- Pēc sekmīgas pabeigšanas programmai ir jāatgriež vērtība.
- Galvenās () funkcijas ķermeņa 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 lieluma maiņai pēc tam, kad tas ir piešķirts.
Tomēr jūs varat pārvarēt šo problēmu, dinamiski piešķirot jaunu masīvu, kopējot elementus un pēc tam izdzēšot veco masīvu.
Piezīme: ka šī tehnika ir pakļauta kļūdām, tāpēc mēģiniet no tās izvairīties.
Dinamiski masīvu dzēšana
Dinamisko masīvu vajadzētu dzēst no datora atmiņas, tiklīdz tā mērķis ir sasniegts. Izdzēšanas paziņojums var jums palīdzēt to paveikt. Pēc tam atbrīvoto atmiņas vietu var izmantot, lai turētu citu datu kopu. Tomēr, pat ja jūs neizdzēšat dinamisko masīvu no datora atmiņas, tas tiks automātiski izdzēsts, tiklīdz programma tiks pārtraukta.
Piezīme:
Lai izdzēstu dinamisko masīvu no datora atmiņas, dzēšanas vietā jāizmanto dzēšana []. [] Uzdod CPU izdzēst vairākus mainīgos, nevis vienu mainīgo. Dzēšot, nevis dzēšot [], strādājot ar dinamisko masīvu, var rasties problēmas. Šādu problēmu piemēri ir atmiņas noplūde, datu bojāšana, avārijas utt.
3. piemērs:
#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;}
Izeja:
Šeit ir koda ekrānuzņēmums:
Koda skaidrojums:
- Iekļaujiet iostream galvenes failu mūsu programmā, lai izmantotu tā funkcijas.
- Iekļaujiet standarta nosaukumu telpu mūsu programmā, lai izmantotu tās klases, to neizsaucot.
- Izsauciet galveno () funkciju. Programmas loģika jāpievieno funkcijas pamattekstā.
- Pasludiniet veselā skaitļa datu tipa divus mainīgos x un n.
- Izdrukājiet tekstu konsolē. Teksts prasīs lietotājam norādīt ievadīto numuru skaitu.
- Lasīt lietotāja ievadīto informāciju no tastatūras. Ievades vērtība tiks piešķirta mainīgajam n.
- Paziņot rādītāja mainīgo * arr. Masīvs arr rezervēs nedaudz atmiņas, lai kopā saglabātu n veselus skaitļus.
- Konsolē izdrukājiet ziņojumu, kurā lietotājs tiek aicināts ievadīt n numurus.
- Izveidojiet cilpu for un cilpu mainīgo x, lai atkārtotu lietotāja ievadītos skaitļus.
- Izlasiet lietotāja ievadītos numurus un saglabājiet tos masīva masīvā.
- For cilpas korpusa beigas.
- Izdrukājiet tekstu konsolē.
- Izmantojiet a for loop un cilpas mainīgo x, lai atkārtotu masīva arr saturu.
- Konsolē izdrukājiet masīva arr vērtības.
- For cilpas korpusa beigas.
- Uz konsoles izdrukājiet tukšu rindu.
- Atbrīvojiet masīva arr atmiņu.
- Kad programma būs veiksmīgi pabeigta, programma atgriezīs vērtību.
- Galvenās () funkcijas ķermeņa beigas.
Kopsavilkums:
- Parastajiem masīviem ir noteikts izmērs. Pēc deklarēšanas nevar mainīt to lielumu.
- Ar šāda veida masīviem atmiņas lielums tiek noteikts kompilēšanas laikā.
- Dinamiskie bloki ir atšķirīgi. To izmērus var mainīt izpildlaika laikā.
- Dinamiskajos masīvos lielumu nosaka izpildlaika laikā.
- Dinamiskie bloki C ++ tiek deklarēti, izmantojot jauno atslēgvārdu.
- Mēs izmantojam kvadrātiekavas, lai norādītu dinamiskajā masīvā saglabājamo vienumu skaitu.
- Kad tas ir izdarīts ar masīvu, 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.
- C ++ masīvu izmēru maiņai nav iebūvēta mehānisma.
- Lai inicializētu masīvu, izmantojot saraksta inicializētāju, mēs neizmantojam operatoru .