Mi az a dinamikus tömb?
A dinamikus tömb meglehetősen hasonlít a szokásos tömbhöz, de a mérete a program futás közben módosítható. A DynamArray elemek összefüggő memóriablokkot foglalnak el.
Egy tömb létrehozása után a mérete nem változtatható meg. A dinamikus tömb azonban más. A dinamikus tömb kitöltése után is bővítheti méretét.
A tömb létrehozása során előre meghatározott memóriamennyiséget rendel hozzá. Ez nem érvényes egy dinamikus tömb esetében, mivel szükség esetén bizonyos tényezővel megnöveli a memória méretét.
Ebben a C ++ oktatóanyagban megtanulja
- Mi az a dinamikus tömb?
- A dinamikus tömbök teljesítményét befolyásoló tényezők
- Az új kulcsszó
- Dinamikusan lefoglalt tömbök inicializálása
- A tömbök átméretezése
- Tömbök dinamikus törlése
A dinamikus tömbök teljesítményét befolyásoló tényezők
A tömb kezdeti mérete és növekedési tényezője határozza meg a teljesítményét. Vegye figyelembe a következő pontokat:
- Ha egy tömbnek kis mérete és kis növekedési tényezője van, akkor gyakrabban folytatja a memória átcsoportosítását. Ez csökkenti a tömb teljesítményét.
- Ha egy tömbnek nagy mérete és nagy növekedési tényezője van, akkor hatalmas darab használaton kívüli memóriája lesz. Emiatt az átméretezési műveletek hosszabb időt vehetnek igénybe. Ez csökkenti a tömb teljesítményét.
Az új kulcsszó
A C ++ - ban létrehozhatunk egy dinamikus tömböt az új kulcsszóval. A kiosztandó elemek számát egy szögletes zárójelben kell megadni. A típusnévnek ezt megelőznie kell. A kért tételszám kiosztásra kerül.
Szintaxis:
Az új kulcsszó a következő szintaxist veszi fel:
pointer_variable = new data_type;
A pointer_variable a mutató változó neve.
Az data_type érvényes C ++ adattípusnak kell lennie.
Ezután a kulcsszó visszaad egy mutatót az első elemre. A dinamikus tömb létrehozása után a törlés kulcsszóval törölhetjük.
1. példa:
#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;}
Kimenet:
Itt van egy képernyőkép a kódról:
Kód Magyarázat:
- Felvegye az iostream fejlécfájlt a programunkba a funkcióinak használatához.
- Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
- Hívja meg a main () függvényt. A program logikát hozzá kell adni a függvény törzséhez.
- Nyújtsunk be két egész változót x és n.
- Nyomtasson ki egy szöveget a konzolra, amelyben arra kéri a felhasználót, hogy adja meg az n változó értékét.
- Olvassa el a felhasználói bevitelt a billentyűzetről, és rendelje hozzá az n változóhoz.
- Nyilvánítson egy tömböt, amely összesen n egész számot tartalmaz, és hozzárendeli azt az * arr mutatóváltozóhoz.
- Nyomtasson egy üzenetet, amelyben arra kéri a felhasználót, hogy írja be n elem számát.
- A for ciklus használatával hozzon létre egy x ciklusváltozót a felhasználó által megadott elemek ismétléséhez.
- Olvassa el a felhasználó által beírt elemeket, és tárolja őket a tömb tömbben.
- A for hurok testének vége.
- Nyomtasson ki egy kis szöveget a konzolra.
- Használjon egy for ciklust, és hozzon létre egy x ciklusváltozót a tömb elemeinek ismétléséhez.
- Nyomtassa ki a konzol arr nevű tömbjének értékeit.
- A for hurok testének vége.
- A programnak a sikeres befejezés után vissza kell térnie az értékre.
- A fő () függvény törzsének vége.
MEGJEGYZÉS: A fenti példában a felhasználó megadhat bármilyen tömböt a futási idő alatt. Ez azt jelenti, hogy a tömb mérete futás közben kerül meghatározásra .
Dinamikusan lefoglalt tömbök inicializálása
Könnyű inicializálni a dinamikus tömböt 0-ra.
Szintaxis:
int *array{ new int[length]{} };
A fenti szintaxisban a hossz a tömbhöz hozzáadandó elemek számát jelöli. Mivel a tömböt 0-ra kell inicializálnunk, ezt üresen kell hagyni.
Inicializálhatunk egy dinamikus tömböt egy inicializáló lista használatával. Készítsünk egy példát, amely ezt demonstrálja.
2. példa:
#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;}
Kimenet:
Itt van egy képernyőkép a kódról:
Kód Magyarázat:
- Felvegye az iostream fejlécfájlt a programunkba a funkcióinak használatához.
- Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
- Hívja meg a main () függvényt. A program logikát hozzá kell adni a függvény törzséhez.
- Nyújtsa be az x nevű egész változót.
- Deklaráljon egy tömb nevű dinamikus tömböt egy inicializáló lista használatával. A tömb 5 egész elemet fog tartalmazni. Vegye figyelembe, hogy a tömbhossz és az inicializáló lista között nem használtuk az operátort.
- Nyomtasson ki egy kis szöveget a konzolra. Az endl egy C ++ kulcsszó, amely végvonalat jelent. A kurzort a következő mondathoz mozgatja.
- Használjon egy for for ciklust a tömbelemek iterációjához.
- Nyomtassa ki a tömb nevű tömb tartalmát a konzolra.
- A for hurok testének vége.
- A programnak a sikeres befejezés után vissza kell térnie az értékre.
- A fő () függvény törzsének vége.
A tömbök átméretezése
A dinamikus tömb hosszát az allokációs idő alatt állítják be.
A C ++ azonban nem rendelkezik beépített mechanizmussal egy tömb átméretezésére, miután kiosztották.
Azonban leküzdheti ezt a kihívást úgy, hogy dinamikusan lefoglal egy új tömböt, átmásolja az elemeket, majd törli a régi tömböt.
Megjegyzés: hogy ez a technika hajlamos a hibákra, ezért próbáld meg elkerülni.
Tömbök dinamikus törlése
A dinamikus tömböt törölni kell a számítógép memóriájából, amint célja teljesül. A törlési utasítás segíthet ebben. A felszabadított memóriaterület ezután felhasználható egy másik adatkészlet tárolására. Még ha nem is törli a dinamikus tömböt a számítógép memóriájából, a program automatikusan leáll, ha a program leáll.
Jegyzet:
Dinamikus tömb törléséhez a számítógép memóriájából a törlés helyett a törlés [] parancsot kell használnia. A [] utasítja a CPU-t, hogy egy változó helyett több változót töröljön. A dinamikus tömb kezelésében a törlés helyett a törlés [] használata problémákat okozhat. Ilyen problémák például a memóriaszivárgás, az adatok sérülése, összeomlások stb.
3. példa:
#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;}
Kimenet:
Itt van egy képernyőkép a kódról:
Kód Magyarázat:
- Tartsa be az iostream fejléc fájlt programunkba annak funkcióinak használata érdekében.
- Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
- Hívja meg a main () függvényt. A program logikát hozzá kell adni a függvény törzséhez.
- Nyújtsa be az x és n változót az egész adattípusból.
- Nyomtasson ki egy kis szöveget a konzolra. A szöveg megkéri a felhasználót, hogy adja meg a beírt számok számát.
- Olvassa el a felhasználói bevitelt a billentyűzetről. A bemeneti érték az n változóhoz lesz rendelve.
- Nyújtsa be a mutatóváltozót * arr. A tömbben marad némi memória összesen n egész szám tárolására.
- Nyomtasson egy üzenetet a konzolra, amelyben arra kéri a felhasználót, hogy írja be n számot.
- Hozzon létre egy for ciklust és az x ciklusváltozót a felhasználó által megadott számok ismétléséhez.
- Olvassa el a felhasználó által beírt számokat, és tárolja őket a tömb tömbben.
- A for hurok testének vége.
- Nyomtasson ki egy kis szöveget a konzolra.
- Használjon a for ciklust és az x ciklusváltozót a tömbtömb tartalmának ismétléséhez.
- Nyomtassa ki a tömb tömb értékeit a konzolon.
- A for hurok testének vége.
- Nyomtasson ki egy üres sort a konzolra.
- Szabadítsa fel a tömb memóriáját.
- A program eredményt ad, ha sikeresen befejezi.
- A fő () függvény törzsének vége.
Összegzés:
- A rendszeres tömböknek fix mérete van. A deklarált méretet nem módosíthatja.
- Az ilyen típusú tömböknél a memória méretét a fordítási idő alatt határozzák meg.
- A dinamikus tömbök különböznek. Méretük futás közben változtatható.
- Dinamikus tömbökben a méret futás közben kerül meghatározásra.
- A C ++ nyelvű dinamikus tömbök deklarálása az új kulcsszó használatával történik.
- Szögletes zárójelek segítségével adjuk meg a dinamikus tömbben tárolandó elemek számát.
- Miután elvégeztük a tömböt, felszabadíthatjuk a memóriát a törlés operátor segítségével.
- Használja a törlés operátort a [] gombbal az összes tömbelem memóriájának felszabadításához.
- A [] nélküli törlés csak egyetlen elem memóriáját szabadítja fel.
- Nincs beépített mechanizmus a C ++ tömbök átméretezésére.
- Ha egy tömböt inicializálunk egy lista inicializálóval, akkor nem használjuk a operátort.