logo

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++




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.