Std :: list v C ++ s příkladem

Obsah:

Anonim

Co je std :: list?

V C ++ odkazuje std :: list na kontejner úložiště. Seznam std: umožňuje vkládat a odebírat položky odkudkoli. Seznam std :: je implementován jako dvojnásobně propojený seznam. To znamená, že k datům seznamu lze přistupovat obousměrně a postupně.

Seznam Standard Template Library nepodporuje rychlý náhodný přístup, ale podporuje sekvenční přístup ze všech směrů.

Prvky seznamu můžete rozptýlit do různých bloků paměti. Informace potřebné pro sekvenční přístup k datům jsou uloženy v kontejneru. Seznam std :: se může během běhu podle potřeby rozšiřovat a zmenšovat z obou konců. Interní alokátor automaticky splňuje požadavky na úložiště.

V tomto výukovém programu C ++ se naučíte:

  • Co je std :: list?
  • Proč používat std :: list?
  • Seznam syntaxe
  • Funkce seznamu C ++
  • Konstruktory
  • Vlastnosti kontejneru
  • Vkládání do seznamu
  • Mazání ze seznamu

Proč používat std :: list?

Zde jsou důvody použití std :: List:

  • Seznam std :: se lépe porovnává s jinými kontejnery sekvence, jako je pole a vektor.
  • Mají lepší výkon při vkládání, přesouvání a vytahování prvků z jakékoli pozice.
  • Seznam std :: list je také lepší s algoritmy, které takové operace provádějí intenzivně.

Seznam syntaxe

Chcete-li definovat std :: list, musíme importovat soubor záhlaví . Zde je syntaxe definice std :: list:

template < class Type, class Alloc =allocator > class list;

Zde je popis výše uvedených parametrů:

  • T - Definuje typ obsaženého prvku.

    T můžete nahradit jakýmkoli datovým typem, dokonce i uživatelem definovanými typy.

  • Alloc - Definuje typ objektu alokátoru.

    Ve výchozím nastavení se používá šablona třídy alokátoru. Je to závislé na hodnotě a používá jednoduchý model přidělení paměti.

Příklady 1:

#include #include #include 
int main() {std::list my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}

Výstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Chcete-li používat jeho funkce, zahrňte soubor záhlaví algoritmu.
  2. Chcete-li používat jeho funkce, zahrňte soubor záhlaví iostream.
  3. Chcete-li používat jeho funkce, zahrňte soubor záhlaví seznamu.
  4. Zavolejte funkci main (). Logika programu by měla být přidána do těla této funkce.
  5. Vytvořte seznam s názvem my_list se sadou 4 celých čísel.
  6. Pomocí smyčky for vytvořte proměnnou smyčky x. Tato proměnná se použije k iteraci prvků seznamu.
  7. Vytiskněte hodnoty seznamu na konzole.
  8. Konec těla pro smyčku.
  9. Konec těla funkce main ().

Funkce seznamu C ++

Zde jsou běžné funkce std :: list:

Funkce Popis
vložit() Tato funkce vloží novou položku před pozici iterátoru.
zatlačit zpátky() Tato funkce přidá novou položku na konec seznamu.
push_front () Přidá novou položku na přední stranu seznamu.
pop_front () Odstraní první položku seznamu.
velikost() Tato funkce určuje počet prvků seznamu.
přední() Určuje první položky seznamu.
zadní() Určuje poslední položku seznamu.
zvrátit() Převrátí položky seznamu.
spojit() Spojuje dva seřazené seznamy.

Konstruktory

Zde je seznam funkcí poskytovaných souborem záhlaví :

  • Výchozí konstruktor std :: list :: list () - Vytvoří prázdný seznam s nulovými prvky.
  • Vyplnit konstruktor std :: list :: list () - Vytvoří seznam s n prvky a každému prvku přiřadí hodnotu nula (0).
  • Konstruktor rozsahu std :: list :: list () - vytvoří seznam s mnoha prvky v rozsahu od prvního do posledního.
  • Kopírovat konstruktor std :: list :: list () - Vytvoří seznam s kopií každého prvku obsaženého v existujícím seznamu.
  • Přesunout konstruktor std :: list :: list () - vytvoří seznam s prvky jiného seznamu pomocí sémantiky přesunu.
  • Konstruktor seznamu inicializátoru std :: list :: list () - vytvoří seznam s prvky jiného seznamu pomocí sémantiky přesunu.

Příklad 2:

#include #include 
using namespace std;int main(void) {list l;list l1 = { 10, 20, 30 };list l2(l1.begin(), l1.end());list l3(move(l1));cout << "Size of list l: " << l.size() << endl;cout << "List l2 contents: " << endl;for (auto it = l2.begin(); it != l2.end(); ++it)cout << *it << endl;cout << "List l3 contents: " << endl;for (auto it = l3.begin(); it != l3.end(); ++it)cout << *it << endl;return 0;}

Výstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Chcete-li používat jeho funkce, zahrňte soubor záhlaví iostream.
  2. Chcete-li používat jeho funkce, zahrňte soubor záhlaví seznamu.
  3. Zahrňte std jmenný prostor do kódu, abyste mohli používat jeho třídy, aniž byste jej volali.
  4. Zavolejte funkci main (). Logika programu by měla být přidána do těla této funkce.
  5. Vytvořte prázdný seznam s názvem l.
  6. Vytvořte seznam s názvem l1 se sadou 3 celých čísel.
  7. Vytvořte seznam s názvem l2 se všemi prvky v seznamu s názvem l1, od začátku do konce.
  8. Vytvořte seznam s názvem l3 pomocí sémantiky přesunu. Seznam l3 bude mít stejný obsah jako seznam l2.
  9. Vytiskněte velikost seznamu s názvem l na konzole spolu s dalším textem.
  10. Vytiskněte nějaký text na konzoli.
  11. Vytvořte iterátor s názvem it a použijte jej k iteraci nad prvky seznamu s názvem l2.
  12. Vytiskněte na konzole prvky seznamu s názvem l2.
  13. Vytiskněte nějaký text na konzoli.
  14. Vytvořte iterátor s názvem it a použijte jej k iteraci nad prvky seznamu s názvem l3.
  15. Vytiskněte na konzole prvky seznamu s názvem l3.
  16. Po úspěšném dokončení musí program vrátit hodnotu.
  17. Konec těla funkce main ().

Vlastnosti kontejneru

Zde je seznam vlastností kontejneru:

Vlastnictví Popis
Sekvence Sekvenční kontejnery objednávají své prvky v přísném lineárním pořadí. K prvkům se přistupuje podle jejich polohy v pořadí.
Zdvojnásobený seznam Každý prvek má informace o tom, jak najít předchozí a následující prvky. To umožňuje konstantní čas pro operace vkládání a mazání.
Allocator vědom Objekt alokátoru se používá k dynamické úpravě velikosti úložiště.

Vkládání do seznamu

Existují různé funkce, které můžeme použít k vložení hodnot do seznamu. Ukažme si to:

Příklad 3:

#include #include #include 
int main() {std::list my_list = { 12, 5, 10, 9 };my_list.push_front(11);my_list.push_back(18);auto it = std::find(my_list.begin(), my_list.end(), 10);if (it != my_list.end()) {my_list.insert(it, 21);}for (int x : my_list) {std::cout << x << '\n';}}

Výstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Chcete-li používat jeho funkce, zahrňte soubor záhlaví algoritmu.
  2. Chcete-li používat jeho funkce, zahrňte soubor záhlaví iostream.
  3. Chcete-li používat jeho funkce, zahrňte soubor záhlaví seznamu.
  4. Zavolejte funkci main (). Logika programu by měla být přidána do těla této funkce.
  5. Vytvořte seznam s názvem my_list se sadou 4 celých čísel.
  6. Vložte prvek 11 do přední části seznamu s názvem my_list.
  7. Vložte prvek 18 na konec seznamu s názvem my_list.
  8. Vytvořte iterátor a pomocí něj vyhledejte prvek 10 ze seznamu my_list.
  9. Pomocí příkazu if určíte, zda byl výše uvedený prvek nalezen nebo ne.
  10. Vložte prvek 21 před výše uvedený prvek, pokud byl nalezen.
  11. Konec těla příkazu if.
  12. Pomocí smyčky for vytvořte proměnnou smyčky x. Tato proměnná se použije k iteraci prvků seznamu.
  13. Vytiskněte hodnoty seznamu na konzole.
  14. Konec těla pro smyčku.
  15. Konec těla funkce main ().

Mazání ze seznamu

Je možné odstranit položky ze seznamu. Funkce mazání () umožňuje odstranit položku nebo řadu položek ze seznamu.

  • Chcete-li odstranit jednu položku, jednoduše předáte jednu celočíselnou pozici. Položka bude odstraněna.
  • Chcete-li odstranit rozsah, předáte počáteční a koncový iterátor. Ukažme si to.

Příklad 4:

#include #include #include 
using namespace std;int main() {std::list my_list = { 12, 5, 10, 9 };cout << "List elements before deletion: ";for (int x : my_list) {std::cout << x << '\n';}list::iterator i = my_list.begin();my_list.erase(i);cout << "\nList elements after deletion: ";for (int x : my_list) {std::cout << x << '\n';}return 0;}

Výstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Chcete-li používat jeho funkce, zahrňte soubor záhlaví algoritmu.
  2. Chcete-li používat jeho funkce, zahrňte soubor záhlaví iostream.
  3. Chcete-li používat jeho funkce, zahrňte soubor záhlaví seznamu.
  4. Zahrňte do našeho programu standardní obor názvů, abyste mohli používat jeho třídy, aniž byste jej volali.
  5. Zavolejte funkci main (). Logika programu by měla být přidána do těla této funkce.
  6. Vytvořte seznam s názvem my_list se sadou 4 celých čísel.
  7. Vytiskněte nějaký text na konzoli.
  8. Pomocí smyčky for vytvořte proměnnou smyčky x. Tato proměnná se použije k iteraci prvků seznamu.
  9. Vytiskněte hodnoty seznamu na konzole.
  10. Konec těla smyčky for.
  11. Vytvořte iterátor i, který ukazuje na první prvek seznamu.
  12. Použijte funkci mazání (), na kterou ukazuje iterátor i.
  13. Vytiskněte nějaký text na konzoli.
  14. Pomocí smyčky for vytvořte proměnnou smyčky x. Tato proměnná se použije k iteraci prvků seznamu.
  15. Vytiskněte hodnoty seznamu na konzole. Toto přichází po smazání.
  16. Konec těla smyčky for.
  17. Po úspěšném dokončení musí program vrátit hodnotu.
  18. Konec těla funkce main ().

Souhrn:

  • Seznam std :: je kontejner úložiště.
  • Umožňuje vkládání a mazání položek odkudkoli a v konstantní době.
  • Je implementován jako dvojnásobný odkaz
  • K datům std :: list lze přistupovat obousměrně a postupně.
  • std :: list nepodporuje rychlý náhodný přístup. Podporuje však sekvenční přístup ze všech směrů.
  • Můžete rozptýlit prvky seznamu std :: list v různých blocích paměti.
  • Podle potřeby můžete za běhu zmenšit nebo rozbalit std :: list z obou konců.
  • K vložení položek do std :: list používáme funkci insert ().
  • Chcete-li odstranit položky ze seznamu std ::, použijeme funkci erase ().