Std :: lista a C ++ - ban a példával

Mi az a std :: lista?

A C ++ nyelven az std :: lista egy tárolótartályra utal. Az std: list lehetővé teszi elemek beillesztését és eltávolítását bárhonnan. Az std :: list kettős linkelésű listaként valósul meg. Ez azt jelenti, hogy a listaadatok kétirányúan és egymás után érhetők el.

A Standard Template Library lista nem támogatja a gyors véletlenszerű hozzáférést, de támogatja a szekvenciális hozzáférést minden irányból.

Szétszórhatja a listaelemeket különböző memória darabokban. Az adatok egymás utáni eléréséhez szükséges információkat egy tároló tárolja. Az std :: lista szükség szerint kibővülhet és zsugorodhat futás közben. A belső lefoglaló automatikusan megfelel a tárolási követelményeknek.

Ebben a C ++ oktatóanyagban megtudhatja:

  • Mi az a std :: lista?
  • Miért érdemes használni az std :: list listát?
  • Sorolja fel a szintaxist
  • C ++ Lista funkciók
  • Konstruktorok
  • Konténer tulajdonságai
  • Beszúrás egy listába
  • Törlés egy listáról

Miért érdemes használni az std :: list listát?

Itt vannak az std :: List használatának okai:

  • Az std :: list jobban hasonlít más szekvencia konténerekhez, mint a tömb és a vektor.
  • Jobb teljesítményt nyújtanak az elemek bármilyen helyzetből történő behelyezésében, mozgatásában és kivonásában.
  • Az std :: list olyan algoritmusokkal is jobban jár, amelyek intenzíven hajtják végre az ilyen műveleteket.

Sorolja fel a szintaxist

Az std :: lista definiálásához importálnunk kell a fejlécfájlt. Itt van az std :: list definíció szintaxisa:

template < class Type, class Alloc =allocator > class list;

Itt található a fenti paraméterek leírása:

  • T - Meghatározza az elem típusát.

    A T-t bármilyen adattípussal helyettesítheti, még a felhasználó által definiált típusokkal is.

  • Alloc - Meghatározza az allokációs objektum típusát.

    Ez alapértelmezés szerint az allokátor osztálysablonját használja. Értékfüggő, és egyszerű memóriaelosztási modellt használ.

1. példa:

#include #include #include 
int main() {std::list my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}

Kimenet:

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

Kód Magyarázat:

  1. Tartalmazza az algoritmus fejlécfájlját a funkcióinak használatához.
  2. Tartsa be az iostream fejlécfájlt a funkcióinak használatához.
  3. Tartalmazza a lista fejlécfájlját a funkcióinak használatához.
  4. Hívja meg a main () függvényt. A program logikát hozzá kell adni ennek a függvénynek a törzséhez.
  5. Hozzon létre egy listát, amelynek neve: my_list, 4 egész sorral.
  6. Használjon egy for ciklust az x ciklusváltozó létrehozásához. Ezt a változót a listaelemek iterációjára használják.
  7. Nyomtassa ki a lista értékeit a konzolon.
  8. A hurok testének vége.
  9. A fő () függvény törzsének vége.

C ++ Lista funkciók

Itt vannak a szokásos std :: list függvények:

Funkció Leírás
beillesztés () Ez a függvény új elemet illeszt be az iterátor által mutatott pozíció elé.
visszavet() Ez a függvény új elemet ad hozzá a lista végén.
push_front () Új elemet ad hozzá a lista elejéhez.
pop_front () Törli a lista első elemét.
méret() Ez a függvény határozza meg a listaelemek számát.
elülső() Meghatározza a lista első tételeit.
vissza() Meghatározza a lista utolsó elemét.
fordított() Megfordítja a listaelemeket.
összeolvad() Két rendezett listát egyesít.

Konstruktorok

Itt található a fejlécfájl által biztosított funkciók listája:

  • Alapértelmezett konstruktor std :: list :: list () - Létrehoz egy üres listát, amely nulla elemmel rendelkezik.
  • Fill constructor std :: list :: list () - N elemet tartalmazó listát hoz létre, és minden elemhez nulla (0) értéket rendel.
  • Tartományszerkesztő std :: list :: list () - létrehoz egy listát, amely számos elemet tartalmaz az elsőtől az utolsóig.
  • Std :: list :: list () - másolja a konstruktort - Létrehozza a meglévő listában található elemek másolatát.
  • Move konstruktor std :: list :: list () - a mozgás szemantika segítségével létrehoz egy listát egy másik lista elemeivel.
  • Inicializáló lista szerkesztő std :: list :: list () - A mozgás szemantika segítségével létrehoz egy listát egy másik lista elemeivel.

2. példa:

#include #include 
using namespace std;int main(void) {list l;list l1 = { 10, 20, 30 };list l2(l1.begin(), l1.end());list l3(move(l1));cout << "Size of list l: " << l.size() << endl;cout << "List l2 contents: " << endl;for (auto it = l2.begin(); it != l2.end(); ++it)cout << *it << endl;cout << "List l3 contents: " << endl;for (auto it = l3.begin(); it != l3.end(); ++it)cout << *it << endl;return 0;}

Kimenet:

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

Kód Magyarázat:

  1. Tartsa be az iostream fejlécfájlt a funkcióinak használatához.
  2. Tartalmazza a lista fejlécfájlját a funkcióinak használatához.
  3. Vegyük be az std névteret a kódba, hogy az osztályait hívás nélkül használhassuk.
  4. Hívja meg a main () függvényt. A program logikát hozzá kell adni ennek a függvénynek a törzséhez.
  5. Hozzon létre egy üres listát, amelynek neve l.
  6. Hozzon létre egy l1 nevű listát 3 egész sorral.
  7. Hozzon létre egy l2 nevű listát az l1 nevű lista összes elemével, az elejétől a végéig.
  8. Hozzon létre egy l3 nevű listát a szemantika használatával. Az l3 lista tartalma megegyezik az l2 listával.
  9. Az l nevű lista méretét nyomtassa ki a konzolra más szöveg mellé.
  10. Nyomtasson ki egy kis szöveget a konzolra.
  11. Hozzon létre egy megnevezett iterátort, és használja azt az l2 nevű lista elemeinek ismétléséhez.
  12. Nyomtassa ki a konzolon az l2 nevű lista elemeit.
  13. Nyomtasson ki egy kis szöveget a konzolra.
  14. Hozzon létre egy megnevezett iterátort, és használja azt az l3 nevű lista elemeinek ismétléséhez.
  15. Nyomtassa ki a konzolon az l3 nevű lista elemeit.
  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.

Konténer tulajdonságai

Itt található a tároló tulajdonságainak listája:

Ingatlan Leírás
Sorrend A szekvencia konténerek szigorú lineáris sorrendben rendezik elemeiket. Az elemeket a sorrendben elfoglalt helyük alapján lehet elérni.
Kétszer linkelt lista Minden elem rendelkezik információkkal az előző és a következő elemek felkutatásáról. Ez állandó időt biztosít a beillesztési és törlési műveletek számára.
Allokátor-tudatában A lefoglaló objektumot a tár méretének dinamikus módosítására használják.

Beszúrás egy listába

Különböző függvények használhatók értékek beszúrására a listába. Bemutassuk ezt:

3. példa:

#include #include #include 
int main() {std::list my_list = { 12, 5, 10, 9 };my_list.push_front(11);my_list.push_back(18);auto it = std::find(my_list.begin(), my_list.end(), 10);if (it != my_list.end()) {my_list.insert(it, 21);}for (int x : my_list) {std::cout << x << '\n';}}

Kimenet:

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

Kód Magyarázat:

  1. Tartalmazza az algoritmus fejlécfájlját a funkcióinak használatához.
  2. Tartsa be az iostream fejlécfájlt a funkcióinak használatához.
  3. Tartalmazza a lista fejlécfájlját a funkcióinak használatához.
  4. Hívja meg a main () függvényt. A program logikát hozzá kell adni ennek a függvénynek a törzséhez.
  5. Hozzon létre egy listát, amelynek neve: my_list, 4 egész sorral.
  6. Helyezze be a 11 elemet a listám elé a my_list elnevezéssel.
  7. Helyezze be a 18. elemet a lista_nevem végére.
  8. Hozzon létre egy iterátort, és ezzel keresse meg a 10 elemet a my_list listából.
  9. Használjon egy if utasítást annak megállapításához, hogy a fenti elem megtalálható-e vagy sem.
  10. Helyezze be a 21. elemet a fenti elem elé, ha megtalálta.
  11. Az if utasítás törzsének vége.
  12. Használjon egy for ciklust az x ciklusváltozó létrehozásához. Ezt a változót a listaelemek iterációjára használják.
  13. Nyomtassa ki a lista értékeit a konzolon.
  14. A hurok testének vége.
  15. A fő () függvény törzsének vége.

Törlés egy listáról

Lehetséges elemeket törölni a listáról. Az erase () funkció lehetővé teszi egy elem vagy elemtartomány törlését a listából.

  • Egyetlen elem törléséhez egyszerűen át kell adnia egy egész pozíciót. Az elem törlődik.
  • Egy tartomány törléséhez át kell adnia a kezdő és a befejező iterátort. Bemutassuk ezt.

4. példa:

#include #include #include 
using namespace std;int main() {std::list my_list = { 12, 5, 10, 9 };cout << "List elements before deletion: ";for (int x : my_list) {std::cout << x << '\n';}list::iterator i = my_list.begin();my_list.erase(i);cout << "\nList elements after deletion: ";for (int x : my_list) {std::cout << x << '\n';}return 0;}

Kimenet:

Itt látható a kód képernyőképe:

Kód Magyarázat:

  1. Tartalmazza az algoritmus fejlécfájlját a funkcióinak használatához.
  2. Tartsa be az iostream fejlécfájlt a funkcióinak használatához.
  3. Tartalmazza a lista fejlécfájlját a funkcióinak használatához.
  4. Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
  5. Hívja meg a main () függvényt. A program logikát hozzá kell adni ennek a függvénynek a törzséhez.
  6. Hozzon létre egy listát, amelynek neve: my_list, 4 egész sorral.
  7. Nyomtasson ki egy kis szöveget a konzolra.
  8. Használjon egy for ciklust az x ciklusváltozó létrehozásához. Ezt a változót a listaelemek iterációjára használják.
  9. Nyomtassa ki a lista értékeit a konzolon.
  10. A for hurok testének vége.
  11. Hozzon létre egy iterátort, amely a lista első elemére mutat.
  12. Használja az iterátor által jelzett erase () függvényt i.
  13. Nyomtasson ki egy kis szöveget a konzolra.
  14. Használjon egy for ciklust az x ciklusváltozó létrehozásához. Ezt a változót a listaelemek iterációjára használják.
  15. Nyomtassa ki a lista értékeit a konzolon. Ez törlés után következik.
  16. A for hurok testének vége.
  17. A programnak eredményt kell adnia a sikeres befejezés után.
  18. A fő () függvény törzsének vége.

Összegzés:

  • Az std :: list egy tárolókonténer.
  • Lehetővé teszi elemek beillesztését és törlését bárhonnan, állandó időben.
  • Kettős linkként valósul meg
  • Az std :: list adatok kétirányúan és egymás után érhetők el.
  • Az std :: list nem támogatja a gyors véletlenszerű hozzáférést. Támogatja azonban a szekvenciális hozzáférést minden irányból.
  • Az std :: list elemeit különböző memória darabokban oszthatja szét.
  • A futás közben szükség szerint kicsinyítheti vagy kibővítheti az std :: listát mindkét végéről.
  • Az elemek beillesztéséhez az std :: listába az insert () függvényt használjuk.
  • Elemek törléséhez az std :: listából az erase () függvényt használjuk.

érdekes cikkek...