Zoznamy sú postupné kontajnerov ktoré umožňujú nesúvislú alokáciu pamäte. V porovnaní s vektorom má zoznam pomalé prechádzanie, ale po nájdení pozície je vkladanie a vymazávanie rýchle (konštantný čas). Normálne, keď hovoríme Zoznam, hovoríme o a dvojito prepojený zoznam . Na implementáciu jednoducho prepojeného zoznamu používame a forward_list .
std::zoznam je trieda kontajnera List. Je súčasťou C++ Standard Template Library (STL) a je definovaná vo vnútri hlavičkový súbor.
Syntax:
std::list name_of_list;>
Príklad:
C++
java hodnota reťazca
// C++ program to demonstrate the use of list containers> #include> #include> using> namespace> std;> int> main()> {> >// defining list> >list<>int>>gqlist{12,45,8,6};> >for> (>auto> i : gqlist) {> >cout << i <<>' '>;> >}> >return> 0;> }> |
exclp
>
>Výkon
12 45 8 6>
Vo vyššie uvedenom príklade sme vytvorili std::list objekt s názvom gqlist a inicializoval ho pomocou zoznamu inicializátorov. Objekty std::list môžeme inicializovať mnohými rôznymi spomenutými spôsobmi tu.
Niektoré základné operácie na std::list
- predné () – Vráti hodnotu prvého prvku v zozname.
- späť() – Vráti hodnotu posledného prvku v zozname.
- push_front() – Pridá nový prvok „g“ na začiatok zoznamu.
- push_back() – Pridá nový prvok „g“ na koniec zoznamu.
- pop_front() – Odstráni prvý prvok zoznamu a zmenší veľkosť zoznamu o 1.
- pop_back() – Odstráni posledný prvok zoznamu a zmenší veľkosť zoznamu o 1.
- vložiť() – Vloží nové prvky do zoznamu pred prvok na určené miesto.
- veľkosť () – Vráti počet prvkov v zozname.
- začať() – Funkcia begin() vracia iterátor ukazujúci na prvý prvok zoznamu.
- koniec() – Funkcia end() vracia iterátor ukazujúci na teoretický posledný prvok, ktorý nasleduje za posledným prvkom.
Nasledujúci príklad demonštruje všeobecné použitie zoznamových kontajnerov a ich základných funkcií v C++.
Príklad:
C++
reťazec zreťazenia v jazyku Java
// C++ program to demonstrate the implementation of List> #include> #include> #include> using> namespace> std;> // function for printing the elements in a list> void> showlist(list<>int>>g)> {> >list<>int>>::iterujte to;> >for> (it = g.begin(); it != g.end(); ++it)> >cout <<>' '> << *it;> >cout <<>'
'>;> }> // Driver Code> int> main()> {> >list<>int>>gqlist1, gqlist2;> >for> (>int> i = 0; i <10; ++i) {> >gqlist1.push_back(i * 2);> >gqlist2.push_front(i * 3);> >}> >cout <<>'
List 1 (gqlist1) is : '>;> >showlist(gqlist1);> >cout <<>'
List 2 (gqlist2) is : '>;> >showlist(gqlist2);> >cout <<>'
gqlist1.front() : '> << gqlist1.front();> >cout <<>'
gqlist1.back() : '> << gqlist1.back();> >cout <<>'
gqlist1.pop_front() : '>;> >gqlist1.pop_front();> >showlist(gqlist1);> >cout <<>'
gqlist2.pop_back() : '>;> >gqlist2.pop_back();> >showlist(gqlist2);> >cout <<>'
gqlist1.reverse() : '>;> >gqlist1.reverse();> >showlist(gqlist1);> >cout <<>'
gqlist2.sort(): '>;> >gqlist2.sort();> >showlist(gqlist2);> >return> 0;> }> |
>
>Výkon
globálne premenné js
List 1 (gqlist1) is : 0 2 4 6 8 10 12 14 16 18 List 2 (gqlist2) is : 27 24 21 18 15 12 9 6 3 0 gqlist1.front() : 0 gqlist1.back() : 18 gqlist1.pop_front() : 2 4 6 8 10 12 14 16 18 gqlist2.pop_back() : 27 24 21 18 15 12 9 6 3 gqlist1.reverse() : 18 16 14 12 10 8 6 4 2 gqlist2.sort(): 3 6 9 12 15 18 21 24 27>
Vyššie uvedený príklad iba demonštruje všeobecné použitie std::list a jeho členských funkcií. Nižšie uvedená tabuľka poskytuje všetky členské funkcie triedy std::list a odkazy na ich podrobné vysvetlenie.
std::list členských funkcií
| Funkcie | Definícia |
|---|---|
| predné () | Vráti hodnotu prvého prvku v zozname. |
| späť() | Vráti hodnotu posledného prvku v zozname. |
| push_front(g) | Pridá nový prvok „g“ na začiatok zoznamu. |
| push_back(g) | Pridá nový prvok „g“ na koniec zoznamu. |
| pop_front() | Odstráni prvý prvok zoznamu a zmenší veľkosť zoznamu o 1. |
| pop_back() | Odstráni posledný prvok zoznamu a zmenší veľkosť zoznamu o 1. |
| zoznam::začiatok() | Funkcia begin() vracia iterátor ukazujúci na prvý prvok zoznamu. |
| zoznam::koniec() | Funkcia end() vracia iterátor ukazujúci na teoretický posledný prvok, ktorý nasleduje za posledným prvkom. |
| zoznam rbegin() a rend() | rbegin() vracia reverzný iterátor, ktorý ukazuje na posledný prvok zoznamu. rend() vracia reverzný iterátor, ktorý ukazuje na pozíciu pred začiatkom zoznamu. |
| zoznam cbegin() a cend() | cbegin() vracia konštantný iterátor náhodného prístupu, ktorý ukazuje na začiatok zoznamu. cend() vracia konštantný iterátor náhodného prístupu, ktorý ukazuje na koniec zoznamu. |
| zoznam crbegin() a crend() | crbegin() vracia konštantný reverzný iterátor, ktorý ukazuje na posledný prvok zoznamu, tj obrátený začiatok kontajnera. crend() vracia konštantný reverzný iterátor, ktorý ukazuje na teoretický prvok predchádzajúci prvému prvku v zozname, t. j. opačný koniec zoznamu. |
| prázdne () | Vráti, či je zoznam prázdny (1) alebo nie (0). |
| vložiť() | Vloží nové prvky do zoznamu pred prvok na určené miesto. |
| vymazať() | Odstráni jeden prvok alebo rozsah prvkov zo zoznamu. |
| priradiť() | Priradí nové prvky zoznamu nahradením aktuálnych prvkov a zmenou veľkosti zoznamu. |
| odstrániť () | Odstráni všetky prvky zo zoznamu, ktoré sa rovnajú danému prvku. |
| zoznam::remove_if() | Používa sa na odstránenie všetkých hodnôt zo zoznamu, ktoré zodpovedajú predikátu alebo podmienke zadanej ako parameter funkcie. |
| obrátiť () | Obráti zoznam. |
| veľkosť () | Vráti počet prvkov v zozname. |
| zmena veľkosti zoznamu () | Používa sa na zmenu veľkosti kontajnera zoznamu. |
| zoradiť () | Zoradí zoznam v rastúcom poradí. |
| zoznam max_size() | Vráti maximálny počet prvkov, ktoré môže obsahovať kontajner zoznamu. |
| zoznam jedinečný() | Odstráni všetky duplicitné po sebe idúce prvky zo zoznamu. |
| zoznam::emplace_front() a zoznam::emplace_back() | Funkcia .emplace_front() sa používa na vloženie nového prvku do kontajnera zoznamu a vytvorí objekt na mieste na začiatku zoznamu. . Funkcia emplace_back() sa používa na vloženie nového prvku do kontajnera zoznamu a vytvorí objekt na mieste na konci zoznamu. |
| zoznam::jasný() | Funkcia clear() sa používa na odstránenie všetkých prvkov kontajnera zoznamu, čím sa zmení na veľkosť 0. |
| zoznam::operátor= | Tento operátor sa používa na priradenie nového obsahu kontajneru nahradením existujúceho obsahu. |
| zoznam::swap() | Táto funkcia sa používa na výmenu obsahu jedného zoznamu s iným zoznamom. |
| zoznam splice() | Používa sa na prenos prvkov z jedného zoznamu do druhého. |
| zoznam zlúčenie() | Zlúči dva zoradené zoznamy do jedného. |
| zoznam emplace() | Rozšíri zoznam vložením nového prvku na danú pozíciu a vytvorí objekt na mieste na začiatku zoznamu, čím potenciálne zlepší výkon tým, že sa vyhne operácii kopírovania |
Body na zapamätanie o kontajneri zoznamu
- Vo všeobecnosti sa implementuje pomocou dynamického dvojito prepojeného zoznamu s prechodom v oboch smeroch.
- Rýchlejšie operácie vkladania a vymazávania v porovnaní s poliami a vektormi.
- Poskytuje iba sekvenčný prístup. Náhodný prístup k žiadnemu strednému prvku nie je možný
- Je definovaný ako šablóna, takže je schopný obsahovať akýkoľvek typ údajov.
- Funguje ako neutriedený zoznam, čo znamená, že predvolene sa poradie zoznamu nezachová. Existujú však techniky triedenia.