Č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:
- Zahrňte súbor hlavičky algoritmu, aby ste mohli využívať jeho funkcie.
- Zahrňte hlavičkový súbor iostream, aby ste mohli využívať jeho funkcie.
- Zahrňte hlavičkový súbor zoznamu, aby ste mohli využívať jeho funkcie.
- Zavolajte funkciu main (). Logika programu by mala byť pridaná do tela tejto funkcie.
- Vytvorte zoznam s názvom my_list so sadou 4 celých čísel.
- Pomocou slučky for vytvorte premennú slučky x. Táto premenná sa použije na iteráciu prvkov zoznamu.
- Vytlačte hodnoty zo zoznamu na konzole.
- Koniec tela pre slučku.
- 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:
- Zahrňte hlavičkový súbor iostream, aby ste mohli využívať jeho funkcie.
- Zahrňte hlavičkový súbor zoznamu, aby ste mohli využívať jeho funkcie.
- Zahrňte štandardný priestor mien do kódu, aby ste mohli používať jeho triedy bez jeho volania.
- Zavolajte funkciu main (). Logika programu by mala byť pridaná do tela tejto funkcie.
- Vytvorte prázdny zoznam s názvom l.
- Vytvorte zoznam s názvom l1 so sadou 3 celých čísel.
- Vytvorte zoznam s názvom l2 so všetkými prvkami v zozname s názvom l1, od začiatku do konca.
- Vytvorte zoznam s názvom l3 pomocou sémantiky presunov. Zoznam l3 bude mať rovnaký obsah ako zoznam l2.
- Vytlačte veľkosť zoznamu s názvom l na konzole spolu s ďalším textom.
- Vytlačte nejaký text na konzolu.
- Vytvorte iterátor s názvom it a použite ho na iteráciu prvkov zoznamu s názvom l2.
- Vytlačte na konzolu prvky zoznamu s názvom l2.
- Vytlačte nejaký text na konzolu.
- Vytvorte iterátor s názvom it a použite ho na iteráciu prvkov zoznamu s názvom l3.
- Vytlačte na konzolu prvky zoznamu s názvom l3.
- Po úspešnom dokončení musí program vrátiť hodnotu.
- 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:
- Zahrňte súbor hlavičky algoritmu, aby ste mohli využívať jeho funkcie.
- Zahrňte hlavičkový súbor iostream, aby ste mohli využívať jeho funkcie.
- Zahrňte hlavičkový súbor zoznamu, aby ste mohli využívať jeho funkcie.
- Zavolajte funkciu main (). Logika programu by mala byť pridaná do tela tejto funkcie.
- Vytvorte zoznam s názvom my_list so sadou 4 celých čísel.
- Vložte prvok 11 do prednej časti zoznamu s názvom my_list.
- Vložte prvok 18 na koniec zoznamu s názvom my_list.
- Vytvorte ho iterátor a pomocou neho vyhľadajte prvok 10 zo zoznamu my_list.
- Pomocou príkazu if môžete zistiť, či bol vyššie uvedený prvok nájdený alebo nie.
- Vložte prvok 21 pred vyššie uvedený prvok, ak bol nájdený.
- Koniec tela príkazu if.
- Pomocou slučky for vytvorte premennú slučky x. Táto premenná sa použije na iteráciu prvkov zoznamu.
- Vytlačte hodnoty zo zoznamu na konzole.
- Koniec tela pre slučku.
- 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:
- Zahrňte súbor hlavičky algoritmu, aby ste mohli využívať jeho funkcie.
- Zahrňte hlavičkový súbor iostream, aby ste mohli využívať jeho funkcie.
- Zahrňte hlavičkový súbor zoznamu, aby ste mohli využívať jeho funkcie.
- Zahrňte do nášho programu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
- Zavolajte funkciu main (). Logika programu by mala byť pridaná do tela tejto funkcie.
- Vytvorte zoznam s názvom my_list so sadou 4 celých čísel.
- Vytlačte nejaký text na konzolu.
- Pomocou slučky for vytvorte premennú slučky x. Táto premenná sa použije na iteráciu prvkov zoznamu.
- Vytlačte hodnoty zo zoznamu na konzole.
- Koniec tela slučky for.
- Vytvorte iterátor i, ktorý smeruje na prvý prvok zoznamu.
- Použite funkciu mazania (), ktorú ukazuje iterátor i.
- Vytlačte nejaký text na konzolu.
- Pomocou slučky for vytvorte premennú slučky x. Táto premenná sa použije na iteráciu prvkov zoznamu.
- Vytlačte hodnoty zo zoznamu na konzole. Toto prichádza po vymazaní.
- Koniec tela slučky for.
- Po úspešnom dokončení musí program vrátiť hodnotu.
- 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 ().