C ++ tömbök dinamikus kiosztása példával

Tartalomjegyzék:

Anonim

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:

  1. 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.
  2. 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:

  1. Felvegye az iostream fejlécfájlt a programunkba a funkcióinak használatához.
  2. Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
  3. Hívja meg a main () függvényt. A program logikát hozzá kell adni a függvény törzséhez.
  4. Nyújtsunk be két egész változót x és n.
  5. 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.
  6. Olvassa el a felhasználói bevitelt a billentyűzetről, és rendelje hozzá az n változóhoz.
  7. 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.
  8. Nyomtasson egy üzenetet, amelyben arra kéri a felhasználót, hogy írja be n elem számát.
  9. A for ciklus használatával hozzon létre egy x ciklusváltozót a felhasználó által megadott elemek ismétléséhez.
  10. Olvassa el a felhasználó által beírt elemeket, és tárolja őket a tömb tömbben.
  11. A for hurok testének vége.
  12. Nyomtasson ki egy kis szöveget a konzolra.
  13. Használjon egy for ciklust, és hozzon létre egy x ciklusváltozót a tömb elemeinek ismétléséhez.
  14. Nyomtassa ki a konzol arr nevű tömbjének értékeit.
  15. A for hurok testének vége.
  16. A programnak a sikeres befejezés után vissza kell térnie az értékre.
  17. 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:

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

Kimenet:

Itt van egy képernyőkép a kódról:

Kód Magyarázat:

  1. Felvegye az iostream fejlécfájlt a programunkba a funkcióinak használatához.
  2. Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
  3. Hívja meg a main () függvényt. A program logikát hozzá kell adni a függvény törzséhez.
  4. Nyújtsa be az x nevű egész változót.
  5. 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.
  6. Nyomtasson ki egy kis szöveget a konzolra. Az endl egy C ++ kulcsszó, amely végvonalat jelent. A kurzort a következő mondathoz mozgatja.
  7. Használjon egy for for ciklust a tömbelemek iterációjához.
  8. Nyomtassa ki a tömb nevű tömb tartalmát a konzolra.
  9. A for hurok testének vége.
  10. A programnak a sikeres befejezés után vissza kell térnie az értékre.
  11. 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:

  1. Tartsa be az iostream fejléc fájlt programunkba annak funkcióinak használata érdekében.
  2. Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
  3. Hívja meg a main () függvényt. A program logikát hozzá kell adni a függvény törzséhez.
  4. Nyújtsa be az x és n változót az egész adattípusból.
  5. 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.
  6. Olvassa el a felhasználói bevitelt a billentyűzetről. A bemeneti érték az n változóhoz lesz rendelve.
  7. 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.
  8. Nyomtasson egy üzenetet a konzolra, amelyben arra kéri a felhasználót, hogy írja be n számot.
  9. Hozzon létre egy for ciklust és az x ciklusváltozót a felhasználó által megadott számok ismétléséhez.
  10. Olvassa el a felhasználó által beírt számokat, és tárolja őket a tömb tömbben.
  11. A for hurok testének vége.
  12. Nyomtasson ki egy kis szöveget a konzolra.
  13. Használjon a for ciklust és az x ciklusváltozót a tömbtömb tartalmának ismétléséhez.
  14. Nyomtassa ki a tömb tömb értékeit a konzolon.
  15. A for hurok testének vége.
  16. Nyomtasson ki egy üres sort a konzolra.
  17. Szabadítsa fel a tömb memóriáját.
  18. A program eredményt ad, ha sikeresen befejezi.
  19. 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.