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:
- Tartalmazza az algoritmus fejlécfájlját a funkcióinak használatához.
- Tartsa be az iostream fejlécfájlt a funkcióinak használatához.
- Tartalmazza a lista fejlécfájlját a funkcióinak használatához.
- Hívja meg a main () függvényt. A program logikát hozzá kell adni ennek a függvénynek a törzséhez.
- Hozzon létre egy listát, amelynek neve: my_list, 4 egész sorral.
- 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.
- Nyomtassa ki a lista értékeit a konzolon.
- A hurok testének vége.
- 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:
- Tartsa be az iostream fejlécfájlt a funkcióinak használatához.
- Tartalmazza a lista fejlécfájlját a funkcióinak használatához.
- Vegyük be az std névteret a kódba, hogy az osztályait hívás nélkül használhassuk.
- Hívja meg a main () függvényt. A program logikát hozzá kell adni ennek a függvénynek a törzséhez.
- Hozzon létre egy üres listát, amelynek neve l.
- Hozzon létre egy l1 nevű listát 3 egész sorral.
- Hozzon létre egy l2 nevű listát az l1 nevű lista összes elemével, az elejétől a végéig.
- Hozzon létre egy l3 nevű listát a szemantika használatával. Az l3 lista tartalma megegyezik az l2 listával.
- Az l nevű lista méretét nyomtassa ki a konzolra más szöveg mellé.
- Nyomtasson ki egy kis szöveget a konzolra.
- Hozzon létre egy megnevezett iterátort, és használja azt az l2 nevű lista elemeinek ismétléséhez.
- Nyomtassa ki a konzolon az l2 nevű lista elemeit.
- Nyomtasson ki egy kis szöveget a konzolra.
- Hozzon létre egy megnevezett iterátort, és használja azt az l3 nevű lista elemeinek ismétléséhez.
- Nyomtassa ki a konzolon az l3 nevű lista elemeit.
- 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.
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:
- Tartalmazza az algoritmus fejlécfájlját a funkcióinak használatához.
- Tartsa be az iostream fejlécfájlt a funkcióinak használatához.
- Tartalmazza a lista fejlécfájlját a funkcióinak használatához.
- Hívja meg a main () függvényt. A program logikát hozzá kell adni ennek a függvénynek a törzséhez.
- Hozzon létre egy listát, amelynek neve: my_list, 4 egész sorral.
- Helyezze be a 11 elemet a listám elé a my_list elnevezéssel.
- Helyezze be a 18. elemet a lista_nevem végére.
- Hozzon létre egy iterátort, és ezzel keresse meg a 10 elemet a my_list listából.
- Használjon egy if utasítást annak megállapításához, hogy a fenti elem megtalálható-e vagy sem.
- Helyezze be a 21. elemet a fenti elem elé, ha megtalálta.
- Az if utasítás törzsének vége.
- 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.
- Nyomtassa ki a lista értékeit a konzolon.
- A hurok testének vége.
- 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:
- Tartalmazza az algoritmus fejlécfájlját a funkcióinak használatához.
- Tartsa be az iostream fejlécfájlt a funkcióinak használatához.
- Tartalmazza a lista fejlécfájlját 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 ennek a függvénynek a törzséhez.
- Hozzon létre egy listát, amelynek neve: my_list, 4 egész sorral.
- Nyomtasson ki egy kis szöveget a konzolra.
- 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.
- Nyomtassa ki a lista értékeit a konzolon.
- A for hurok testének vége.
- Hozzon létre egy iterátort, amely a lista első elemére mutat.
- Használja az iterátor által jelzett erase () függvényt i.
- Nyomtasson ki egy kis szöveget a konzolra.
- 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.
- Nyomtassa ki a lista értékeit a konzolon. Ez törlés után következik.
- A for hurok testének vége.
- A programnak eredményt kell adnia a sikeres befejezés után.
- 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.