logo

Seznam v C++ Standard Template Library (STL)

Seznamy jsou posloupné kontejnery které umožňují nesouvislé přidělování paměti. Ve srovnání s vektorem má seznam pomalé procházení, ale jakmile je pozice nalezena, vkládání a mazání je rychlé (konstantní čas). Normálně, když říkáme seznam, mluvíme o a dvojitě propojený seznam . Pro implementaci jednoduše propojeného seznamu používáme a forward_list .

std::list je třída kontejneru List. Je součástí C++ Standard Template Library (STL) a je definován uvnitř hlavičkový soubor.

Syntax:



std::list name_of_list;>

Příklad:

C++


název speciálních znaků



// 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ýstup

12 45 8 6>

Ve výše uvedeném příkladu jsme vytvořili objekt std::list s názvem gqlist a inicializoval jej pomocí seznamu initializer_list. Objekty std::list můžeme inicializovat mnoha různými zmíněnými způsoby tady.

Některé základní operace na std::list

  • přední() Vrátí hodnotu prvního prvku v seznamu.
  • zadní() Vrátí hodnotu posledního prvku v seznamu.
  • push_front() Přidá nový prvek ‚g‘ na začátek seznamu.
  • zatlačit zpátky() Přidá nový prvek ‚g‘ na konec seznamu.
  • pop_front() Odebere první prvek seznamu a zmenší velikost seznamu o 1.
  • pop_back() Odebere poslední prvek seznamu a zmenší velikost seznamu o 1.
  • vložit() Vloží nové prvky do seznamu před prvek na zadané pozici.
  • velikost() Vrátí počet prvků v seznamu.
  • začít() Funkce begin() vrací iterátor ukazující na první prvek seznamu.
  • konec() Funkce end() vrací iterátor ukazující na teoretický poslední prvek, který následuje za posledním prvkem.

Níže uvedený příklad ukazuje obecné použití seznamových kontejnerů a jejich základních funkcí v C++.

Příklad:

ukázkový javascript

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ýstup

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>

Výše uvedený příklad pouze demonstruje obecné použití std::list a jeho členských funkcí. Níže uvedená tabulka poskytuje všechny členské funkce třídy std::list a odkazy na jejich podrobné vysvětlení.

std::list Funkce členů

Funkce

Definice

přední() Vrátí hodnotu prvního prvku v seznamu.
zadní() Vrátí hodnotu posledního prvku v seznamu.
push_front(g) Přidá nový prvek ‚g‘ na začátek seznamu.
push_back(g) Přidá nový prvek ‚g‘ na konec seznamu.
pop_front() Odebere první prvek seznamu a zmenší velikost seznamu o 1.
pop_back() Odebere poslední prvek seznamu a zmenší velikost seznamu o 1.
seznam::začátek() Funkce begin() vrací iterátor ukazující na první prvek seznamu.
seznam::konec() Funkce end() vrací iterátor ukazující na teoretický poslední prvek, který následuje za posledním prvkem.
seznam rbegin() a rend() rbegin() vrací zpětný iterátor, který ukazuje na poslední prvek seznamu. rend() vrací zpětný iterátor, který ukazuje na pozici před začátkem seznamu.
seznam cbegin() a cend() cbegin() vrací konstantní iterátor náhodného přístupu, který ukazuje na začátek seznamu. cend() vrací konstantní iterátor náhodného přístupu, který ukazuje na konec seznamu.
seznam cribegin() a crend() crbegin() vrací konstantní reverzní iterátor, který ukazuje na poslední prvek seznamu, tj. obrácený začátek kontejneru. crend() vrací konstantní reverzní iterátor, který ukazuje na teoretický prvek předcházející prvnímu prvku v seznamu, tj. na opačný konec seznamu.
prázdný() Vrací, zda je seznam prázdný(1) nebo ne(0).
vložit() Vloží nové prvky do seznamu před prvek na zadané pozici.
vymazat() Odebere jeden prvek nebo rozsah prvků ze seznamu.
přiřadit() Přiřadí seznamu nové prvky nahrazením aktuálních prvků a změnou velikosti seznamu.
odstranit() Odebere ze seznamu všechny prvky, které se rovnají danému prvku.
list::remove_if() Používá se k odstranění všech hodnot ze seznamu, které odpovídají predikátu nebo podmínce dané funkci jako parametr.
zvrátit() Obrátí seznam.
velikost() Vrátí počet prvků v seznamu.
změna velikosti seznamu () Používá se ke změně velikosti kontejneru seznamu.
seřadit () Seřadí seznam v rostoucím pořadí.
seznam max_size() Vrátí maximální počet prvků, které může kontejner seznamu pojmout.
seznam jedinečný() Odebere všechny duplicitní po sobě jdoucí prvky ze seznamu.
list::emplace_front() a list::emplace_back() Funkce .emplace_front() se používá k vložení nového prvku do kontejneru seznamu a vytvoří objekt na místě na začátku seznamu.
. Funkce emplace_back() se používá k vložení nového prvku do kontejneru seznamu a vytvoří objekt na místě na konci seznamu.
seznam::jasný() Funkce clear() se používá k odstranění všech prvků kontejneru seznamu, takže má velikost 0.
seznam::operátor= Tento operátor se používá k přiřazení nového obsahu kontejneru nahrazením stávajícího obsahu.
seznam::swap() Tato funkce se používá k záměně obsahu jednoho seznamu za jiný.
seznam splice() Používá se k přenosu prvků z jednoho seznamu do druhého.
sloučení seznamu() Sloučí dva seřazené seznamy do jednoho.
seznam emplace() Rozšiřuje seznam vložením nového prvku na danou pozici a vytváří objekt na místě na začátku seznamu, což potenciálně zlepšuje výkon tím, že se vyhne operaci kopírování.

Body k zapamatování o kontejneru seznamu

  • Obecně se implementuje pomocí dynamického dvojitě propojeného seznamu s procházením v obou směrech.
  • Rychlejší operace vkládání a mazání ve srovnání s poli a vektory.
  • Poskytuje pouze sekvenční přístup. Náhodný přístup k žádnému prostřednímu prvku není možný
  • Je definován jako šablona, ​​takže je schopen pojmout jakýkoli datový typ.
  • Funguje jako netříděný seznam, což znamená, že ve výchozím nastavení není pořadí seznamu zachováno. Existují však techniky pro třídění.