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í.