Zoznam v C++ Standard Template Library (STL)
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++
// 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;> }> |
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++
// 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
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.