Std :: list v C ++ s príkladom

Obsah:

Anonim

Čo je std :: list?

V C ++ odkazuje zoznam std :: na úložný kontajner. Zoznam std: umožňuje vkladať a odstraňovať položky odkiaľkoľvek. Zoznam std :: je implementovaný ako dvojnásobne prepojený zoznam. To znamená, že k údajom v zozname je možné pristupovať obojsmerne a postupne.

Zoznam Knižnica štandardných šablón nepodporuje rýchly náhodný prístup, podporuje však sekvenčný prístup zo všetkých smerov.

Prvky zoznamu môžete rozptýliť do rôznych blokov pamäte. Informácie potrebné na postupný prístup k údajom sú uložené v kontajneri. Zoznam std :: sa môže počas behu rozširovať a zmenšovať z oboch strán podľa potreby. Interný prideľovač automaticky spĺňa požiadavky na ukladanie.

V tomto výučbe pre C ++ sa dozviete:

  • Čo je std :: list?
  • Prečo používať std :: list?
  • Zoznam Syntax
  • Zoznam funkcií C ++
  • Konštruktéri
  • Vlastnosti nádoby
  • Vkladanie do zoznamu
  • Vymazávanie zo zoznamu

Prečo používať std :: list?

Tu sú dôvody použitia std :: List:

  • Zoznam std :: sa lepšie porovnáva s ostatnými kontajnermi sekvencií, ako sú pole a vektor.
  • Majú lepší výkon pri vkladaní, presúvaní a vyťahovaní prvkov z akejkoľvek polohy.
  • Zoznam std :: list si vedie lepšie aj pri algoritmoch, ktoré takéto operácie vykonávajú intenzívne.

Zoznam Syntax

Ak chcete definovať zoznam std ::, musíme importovať súbor hlavičky . Tu je syntax definície std :: list:

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

Tu je popis vyššie uvedených parametrov:

  • T - Definuje typ obsiahnutého prvku.

    T môžete nahradiť akýmkoľvek dátovým typom, dokonca aj používateľom definovanými typmi.

  • Alloc - Definuje typ objektu prideľovača.

    Toto predvolene používa šablónu triedy alokátora. Je to závislé od hodnoty a používa sa jednoduchý model alokácie pamäte.

Príklady 1:

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

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrňte súbor hlavičky algoritmu, aby ste mohli využívať jeho funkcie.
  2. Zahrňte hlavičkový súbor iostream, aby ste mohli využívať jeho funkcie.
  3. Zahrňte hlavičkový súbor zoznamu, aby ste mohli využívať jeho funkcie.
  4. Zavolajte funkciu main (). Logika programu by mala byť pridaná do tela tejto funkcie.
  5. Vytvorte zoznam s názvom my_list so sadou 4 celých čísel.
  6. Pomocou slučky for vytvorte premennú slučky x. Táto premenná sa použije na iteráciu prvkov zoznamu.
  7. Vytlačte hodnoty zo zoznamu na konzole.
  8. Koniec tela pre slučku.
  9. Koniec tela hlavnej () funkcie.

Zoznam funkcií C ++

Tu sú bežné funkcie std :: list:

Funkcia Popis
vložiť () Táto funkcia vloží novú položku pred pozíciu, na ktorú smeruje iterátor.
push_back () Táto funkcia pridáva na koniec zoznamu novú položku.
push_front () Pridáva novú položku na prednú časť zoznamu.
pop_front () Vymaže sa prvá položka zoznamu.
veľkosť () Táto funkcia určuje počet prvkov zoznamu.
predné () Určuje prvé položky v zozname.
späť() Určuje poslednú položku zoznamu.
reverz () Obráti položky v zozname.
zlúčiť() Zlúči dva zoradené zoznamy.

Konštruktéri

Tu je zoznam funkcií poskytovaných hlavičkovým súborom :

  • Predvolený konštruktor std :: list :: list () - vytvorí prázdny zoznam s nulovými prvkami.
  • Vyplniť konštruktor std :: list :: list () - Vytvorí zoznam s n prvkami a každému prvku priradí hodnotu nula (0).
  • Konštruktor rozsahu std :: list :: list () - vytvorí zoznam s mnohými prvkami v rozsahu od prvého do posledného.
  • Kopírovať konštruktor std :: list :: list () - vytvorí zoznam s kópiou každého prvku obsiahnutého v existujúcom zozname.
  • Move constructor std :: list :: list () - vytvorí zoznam s prvkami iného zoznamu pomocou sémantiky presunu.
  • Konštruktor zoznamu inicializátora std :: list :: list () - vytvorí zoznam s prvkami iného zoznamu pomocou sémantiky presunu.

Príklad 2:

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

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrňte hlavičkový súbor iostream, aby ste mohli využívať jeho funkcie.
  2. Zahrňte hlavičkový súbor zoznamu, aby ste mohli využívať jeho funkcie.
  3. Zahrňte štandardný priestor mien do kódu, aby ste mohli používať jeho triedy bez jeho volania.
  4. Zavolajte funkciu main (). Logika programu by mala byť pridaná do tela tejto funkcie.
  5. Vytvorte prázdny zoznam s názvom l.
  6. Vytvorte zoznam s názvom l1 so sadou 3 celých čísel.
  7. Vytvorte zoznam s názvom l2 so všetkými prvkami v zozname s názvom l1, od začiatku do konca.
  8. Vytvorte zoznam s názvom l3 pomocou sémantiky presunov. Zoznam l3 bude mať rovnaký obsah ako zoznam l2.
  9. Vytlačte veľkosť zoznamu s názvom l na konzole spolu s ďalším textom.
  10. Vytlačte nejaký text na konzolu.
  11. Vytvorte iterátor s názvom it a použite ho na iteráciu prvkov zoznamu s názvom l2.
  12. Vytlačte na konzolu prvky zoznamu s názvom l2.
  13. Vytlačte nejaký text na konzolu.
  14. Vytvorte iterátor s názvom it a použite ho na iteráciu prvkov zoznamu s názvom l3.
  15. Vytlačte na konzolu prvky zoznamu s názvom l3.
  16. Po úspešnom dokončení musí program vrátiť hodnotu.
  17. Koniec tela hlavnej () funkcie.

Vlastnosti nádoby

Tu je zoznam vlastností kontajnera:

Nehnuteľnosť Popis
Postupnosť Sekvenčné kontajnery usporiadajú svoje prvky v prísnom lineárnom poradí. K prvkom sa pristupuje podľa ich polohy v poradí.
Dvojnásobne prepojený zoznam Každý prvok obsahuje informácie o tom, ako nájsť predchádzajúci a nasledujúci prvok. To umožňuje konštantný čas na operácie vkladania a mazania.
Uvedomujúci si alokátor Objekt prideľovača sa používa na dynamickú úpravu veľkosti úložiska.

Vkladanie do zoznamu

Existujú rôzne funkcie, ktoré môžeme použiť na vloženie hodnôt do zoznamu. Poďme si to demonštrovať:

Príklad 3:

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

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrňte súbor hlavičky algoritmu, aby ste mohli využívať jeho funkcie.
  2. Zahrňte hlavičkový súbor iostream, aby ste mohli využívať jeho funkcie.
  3. Zahrňte hlavičkový súbor zoznamu, aby ste mohli využívať jeho funkcie.
  4. Zavolajte funkciu main (). Logika programu by mala byť pridaná do tela tejto funkcie.
  5. Vytvorte zoznam s názvom my_list so sadou 4 celých čísel.
  6. Vložte prvok 11 do prednej časti zoznamu s názvom my_list.
  7. Vložte prvok 18 na koniec zoznamu s názvom my_list.
  8. Vytvorte ho iterátor a pomocou neho vyhľadajte prvok 10 zo zoznamu my_list.
  9. Pomocou príkazu if môžete zistiť, či bol vyššie uvedený prvok nájdený alebo nie.
  10. Vložte prvok 21 pred vyššie uvedený prvok, ak bol nájdený.
  11. Koniec tela príkazu if.
  12. Pomocou slučky for vytvorte premennú slučky x. Táto premenná sa použije na iteráciu prvkov zoznamu.
  13. Vytlačte hodnoty zo zoznamu na konzole.
  14. Koniec tela pre slučku.
  15. Koniec tela hlavnej () funkcie.

Vymazávanie zo zoznamu

Je možné mazať položky zo zoznamu. Funkcia mazania () vám umožňuje vymazať položku alebo rozsah položiek zo zoznamu.

  • Ak chcete vymazať jednu položku, jednoducho prejdete jednou celočíselnou pozíciou. Položka bude odstránená.
  • Ak chcete rozsah odstrániť, odovzdáte počiatočný a konečný iterátor. Poďme si to demonštrovať.

Príklad 4:

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

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrňte súbor hlavičky algoritmu, aby ste mohli využívať jeho funkcie.
  2. Zahrňte hlavičkový súbor iostream, aby ste mohli využívať jeho funkcie.
  3. Zahrňte hlavičkový súbor zoznamu, aby ste mohli využívať jeho funkcie.
  4. Zahrňte do nášho programu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
  5. Zavolajte funkciu main (). Logika programu by mala byť pridaná do tela tejto funkcie.
  6. Vytvorte zoznam s názvom my_list so sadou 4 celých čísel.
  7. Vytlačte nejaký text na konzolu.
  8. Pomocou slučky for vytvorte premennú slučky x. Táto premenná sa použije na iteráciu prvkov zoznamu.
  9. Vytlačte hodnoty zo zoznamu na konzole.
  10. Koniec tela slučky for.
  11. Vytvorte iterátor i, ktorý smeruje na prvý prvok zoznamu.
  12. Použite funkciu mazania (), ktorú ukazuje iterátor i.
  13. Vytlačte nejaký text na konzolu.
  14. Pomocou slučky for vytvorte premennú slučky x. Táto premenná sa použije na iteráciu prvkov zoznamu.
  15. Vytlačte hodnoty zo zoznamu na konzole. Toto prichádza po vymazaní.
  16. Koniec tela slučky for.
  17. Po úspešnom dokončení musí program vrátiť hodnotu.
  18. Koniec tela hlavnej () funkcie.

Zhrnutie:

  • Zoznam std :: je úložný kontajner.
  • Umožňuje vkladanie a mazanie položiek odkiaľkoľvek a v rovnakom čase.
  • Je implementovaný ako dvojnásobný odkaz
  • K údajom std :: list je možné pristupovať obojsmerne a postupne.
  • std :: list nepodporuje rýchly náhodný prístup. Podporuje však sekvenčný prístup zo všetkých smerov.
  • Prvky zoznamu std :: list môžete rozptýliť do rôznych blokov pamäte.
  • Počas behu programu môžete podľa potreby zmenšiť alebo rozšíriť std :: list z oboch koncov podľa potreby.
  • Na vkladanie položiek do std :: list používame funkciu insert ().
  • Na vymazanie položiek zo zoznamu std :: používame funkciu erase ().