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:
- Chcete-li používat jeho funkce, zahrňte soubor záhlaví algoritmu.
- Chcete-li používat jeho funkce, zahrňte soubor záhlaví iostream.
- Chcete-li používat jeho funkce, zahrňte soubor záhlaví seznamu.
- Zavolejte funkci main (). Logika programu by měla být přidána do těla této funkce.
- Vytvořte seznam s názvem my_list se sadou 4 celých čísel.
- Pomocí smyčky for vytvořte proměnnou smyčky x. Tato proměnná se použije k iteraci prvků seznamu.
- Vytiskněte hodnoty seznamu na konzole.
- Konec těla pro smyčku.
- 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:
- Chcete-li používat jeho funkce, zahrňte soubor záhlaví iostream.
- Chcete-li používat jeho funkce, zahrňte soubor záhlaví seznamu.
- Zahrňte std jmenný prostor do kódu, abyste mohli používat jeho třídy, aniž byste jej volali.
- Zavolejte funkci main (). Logika programu by měla být přidána do těla této funkce.
- Vytvořte prázdný seznam s názvem l.
- Vytvořte seznam s názvem l1 se sadou 3 celých čísel.
- Vytvořte seznam s názvem l2 se všemi prvky v seznamu s názvem l1, od začátku do konce.
- Vytvořte seznam s názvem l3 pomocí sémantiky přesunu. Seznam l3 bude mít stejný obsah jako seznam l2.
- Vytiskněte velikost seznamu s názvem l na konzole spolu s dalším textem.
- Vytiskněte nějaký text na konzoli.
- Vytvořte iterátor s názvem it a použijte jej k iteraci nad prvky seznamu s názvem l2.
- Vytiskněte na konzole prvky seznamu s názvem l2.
- Vytiskněte nějaký text na konzoli.
- Vytvořte iterátor s názvem it a použijte jej k iteraci nad prvky seznamu s názvem l3.
- Vytiskněte na konzole prvky seznamu s názvem l3.
- Po úspěšném dokončení musí program vrátit hodnotu.
- 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:
- Chcete-li používat jeho funkce, zahrňte soubor záhlaví algoritmu.
- Chcete-li používat jeho funkce, zahrňte soubor záhlaví iostream.
- Chcete-li používat jeho funkce, zahrňte soubor záhlaví seznamu.
- Zavolejte funkci main (). Logika programu by měla být přidána do těla této funkce.
- Vytvořte seznam s názvem my_list se sadou 4 celých čísel.
- Vložte prvek 11 do přední části seznamu s názvem my_list.
- Vložte prvek 18 na konec seznamu s názvem my_list.
- Vytvořte iterátor a pomocí něj vyhledejte prvek 10 ze seznamu my_list.
- Pomocí příkazu if určíte, zda byl výše uvedený prvek nalezen nebo ne.
- Vložte prvek 21 před výše uvedený prvek, pokud byl nalezen.
- Konec těla příkazu if.
- Pomocí smyčky for vytvořte proměnnou smyčky x. Tato proměnná se použije k iteraci prvků seznamu.
- Vytiskněte hodnoty seznamu na konzole.
- Konec těla pro smyčku.
- 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:
- Chcete-li používat jeho funkce, zahrňte soubor záhlaví algoritmu.
- Chcete-li používat jeho funkce, zahrňte soubor záhlaví iostream.
- Chcete-li používat jeho funkce, zahrňte soubor záhlaví seznamu.
- Zahrňte do našeho programu standardní obor názvů, abyste mohli používat jeho třídy, aniž byste jej volali.
- Zavolejte funkci main (). Logika programu by měla být přidána do těla této funkce.
- Vytvořte seznam s názvem my_list se sadou 4 celých čísel.
- Vytiskněte nějaký text na konzoli.
- Pomocí smyčky for vytvořte proměnnou smyčky x. Tato proměnná se použije k iteraci prvků seznamu.
- Vytiskněte hodnoty seznamu na konzole.
- Konec těla smyčky for.
- Vytvořte iterátor i, který ukazuje na první prvek seznamu.
- Použijte funkci mazání (), na kterou ukazuje iterátor i.
- Vytiskněte nějaký text na konzoli.
- Pomocí smyčky for vytvořte proměnnou smyčky x. Tato proměnná se použije k iteraci prvků seznamu.
- Vytiskněte hodnoty seznamu na konzole. Toto přichází po smazání.
- Konec těla smyčky for.
- Po úspěšném dokončení musí program vrátit hodnotu.
- 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 ().