Vad är en std :: lista?
I C ++ hänvisar std :: -listan till en lagringsbehållare. I listan std: kan du infoga och ta bort objekt var som helst. Std :: -listan implementeras som en dubbelt länkad lista. Detta betyder att listdata kan nås i två riktningar och sekventiellt.
Standardmallbibliotekslistan stöder inte snabb slumpmässig åtkomst, men den stöder sekventiell åtkomst från alla riktningar.
Du kan sprida listelement i olika minnesbitar. Informationen som behövs för sekventiell åtkomst till data lagras i en container. Std :: -listan kan expandera och krympa från båda ändar efter behov under körning. En intern fördelare uppfyller automatiskt lagringskraven.
I denna C ++ -handledning lär du dig:
- Vad är en std :: lista?
- Varför använda std :: list?
- Lista syntax
- C ++ Listfunktioner
-
- Konstruktörer
- Behållaregenskaper
- Infoga i en lista
- Ta bort från en lista
Varför använda std :: list?
Här är anledningen till att använda std :: List:
- Std :: -listan jämförs bättre med andra sekvensbehållare som array och vector.
- De har bättre prestanda när det gäller att infoga, flytta och extrahera element från vilken position som helst.
- Std :: -listan klarar sig också bättre med algoritmer som utför sådana operationer intensivt.
Lista syntax
För att definiera std :: -listan måste vi importera
rubrikfilen. Här är syntaxen för std :: listdefinition:
template < class Type, class Alloc =allocator> class list;
Här är en beskrivning av ovanstående parametrar:
- T - Definierar vilken typ av element som finns.
Du kan ersätta T med vilken datatyp som helst, även användardefinierade typer.
- Alloc - Definierar typen av allokeringsobjekt.
Detta använder klassmallen för allokerare som standard. Det är värdeberoende och använder en enkel minnestilldelningsmodell.
Exempel 1:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}
Produktion:
Här är en skärmdump av koden:
Kodförklaring:
- Inkludera algoritmhuvudfilen för att använda dess funktioner.
- Inkludera iostream-rubrikfilen för att använda dess funktioner.
- Inkludera listhuvudfilen för att använda dess funktioner.
- Ring huvudfunktionen (). Programlogiken bör läggas till i denna funktion.
- Skapa en lista med namnet my_list med en uppsättning av fyra heltal.
- Använd en for-loop för att skapa en loop-variabel x. Denna variabel kommer att användas för att itera över listelementen.
- Skriv ut värdena på listan på konsolen.
- Slutet på kroppen för en slinga.
- Slutet på huvudfunktionens () kropp.
C ++ Listfunktioner
Här är de vanliga std :: listfunktionerna:
Fungera | Beskrivning |
Föra in() | Denna funktion infogar ett nytt objekt före den position iteratorn pekar på. |
trycka tillbaka() | Dessa funktioner lägger till ett nytt objekt i listans slut. |
push_front () | Det lägger till ett nytt objekt längst fram på listan. |
pop_front () | Det tar bort listans första objekt. |
storlek() | Denna funktion bestämmer antalet listelement. |
främre() | För att bestämma listans första objekt. |
tillbaka() | För att bestämma listans senaste objekt. |
omvänd() | Det vänder listobjekten. |
sammanfoga() | Den slår samman två sorterade listor. |
Konstruktörer
Här är listan över funktioner som tillhandahålls av
rubrikfilen:
- Standardkonstruktör std :: list :: list () - Det skapar en tom lista med noll element.
- Fill constructor std :: list :: list () - Det skapar en lista med n-element och tilldelar varje element ett värde på noll (0).
- Range constructor std :: list :: list () - skapar en lista med många element i intervallet först till sista.
- Copy constructor std :: list :: list () - Den skapar en lista med en kopia av varje element som finns i den befintliga listan.
- Move constructor std :: list :: list () - skapar en lista med elementen i en annan lista med move semantics.
- Initializer list constructor std :: list :: list () - Den skapar en lista med elementen i en annan lista med move semantics.
Exempel 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;}
Produktion:
Här är en skärmdump av koden:
Kodförklaring:
- Inkludera iostream-rubrikfilen för att använda dess funktioner.
- Inkludera listhuvudfilen för att använda dess funktioner.
- Inkludera std-namnområdet i koden för att använda dess klasser utan att anropa det.
- Ring huvudfunktionen (). Programlogiken bör läggas till i denna funktion.
- Skapa en tom lista med namnet l.
- Skapa en lista med namnet l1 med en uppsättning av tre heltal.
- Skapa en lista med namnet l2 med alla element i listan l1, från början till slutet.
- Skapa en lista med namnet l3 med move semantics. Listan l3 kommer att ha samma innehåll som listan l2.
- Skriv ut storleken på listan med namnet l på konsolen tillsammans med annan text.
- Skriv ut lite text på konsolen.
- Skapa en iterator som heter den och använd den för att itera över elementen i listan som heter l2.
- Skriv ut elementen i listan l2 på konsolen.
- Skriv ut lite text på konsolen.
- Skapa en iterator som heter den och använd den för att itera över elementen i listan med namnet l3.
- Skriv ut elementen i listan med namnet l3 på konsolen.
- Programmet måste returnera värde när det är klart.
- Slutet på huvudfunktionens () kropp.
Behållaregenskaper
Här är listan över behållaregenskaper:
Fast egendom | Beskrivning |
Sekvens | Sekvensbehållare ordnar sina element i en strikt linjär sekvens. Element nås genom deras position i sekvensen. |
Dubbel länkad lista | Varje element har information om hur man hittar tidigare och nästa element. Detta möjliggör konstant tid för insättning och radering. |
Allocator-medveten | Ett allokeringsobjekt används för att ändra lagringsstorleken dynamiskt. |
Infoga i en lista
Det finns olika funktioner som vi kan använda för att infoga värden i en lista. Låt oss demonstrera detta:
Exempel 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';}}
Produktion:
Här är en skärmdump av koden:
Kodförklaring:
- Inkludera algoritmhuvudfilen för att använda dess funktioner.
- Inkludera iostream-rubrikfilen för att använda dess funktioner.
- Inkludera listhuvudfilen för att använda dess funktioner.
- Ring huvudfunktionen (). Programlogiken bör läggas till i denna funktion.
- Skapa en lista med namnet my_list med en uppsättning av fyra heltal.
- Sätt in elementet 11 längst fram i listan med namnet my_list.
- Infoga element 18 i slutet av listan med namnet my_list.
- Skapa en iterator och använd den för att hitta elementet 10 från listan my_list.
- Använd ett if-uttalande för att avgöra om ovanstående element hittades eller inte.
- Sätt in element 21 före ovanstående element om det hittades.
- Slutet på kroppen om if-uttalandet.
- Använd en for-loop för att skapa en loop-variabel x. Denna variabel kommer att användas för att itera över listelementen.
- Skriv ut värdena på listan på konsolen.
- Slutet på kroppen för en slinga.
- Slutet på huvudfunktionens () kropp.
Ta bort från en lista
Det är möjligt att ta bort objekt från en lista. Radera () -funktionen låter dig radera ett objekt eller ett antal objekt från en lista.
- För att radera ett enstaka objekt skickar du helt enkelt ett heltalsposition. Objektet kommer att raderas.
- För att radera ett intervall passerar du start- och slut-iteratorerna. Låt oss demonstrera detta.
Exempel 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;}
Produktion:
Här är skärmdump av koden:
Kodförklaring:
- Inkludera algoritmhuvudfilen för att använda dess funktioner.
- Inkludera iostream-rubrikfilen för att använda dess funktioner.
- Inkludera listhuvudfilen för att använda dess funktioner.
- Inkludera std-namnområdet i vårt program för att använda sina klasser utan att kalla det.
- Ring huvudfunktionen (). Programlogiken bör läggas till i denna funktion.
- Skapa en lista med namnet my_list med en uppsättning av fyra heltal.
- Skriv ut lite text på konsolen.
- Använd en for-loop för att skapa en loop-variabel x. Denna variabel kommer att användas för att itera över listelementen.
- Skriv ut värdena på listan på konsolen.
- Slutet på for-loopens kropp.
- Skapa en iterator i som pekar på det första elementet i listan.
- Använd radera () -funktionen som pekas av iteratorn i.
- Skriv ut lite text på konsolen.
- Använd en for-loop för att skapa en loop-variabel x. Denna variabel kommer att användas för att itera över listelementen.
- Skriv ut värdena på listan på konsolen. Detta kommer efter radering.
- Slutet på for-loopens kropp.
- Programmet måste returnera ett värde när det är klart.
- Slutet på huvudfunktionens () kropp.
Sammanfattning:
- Listan std :: är en lagringsbehållare.
- Det gör det möjligt att infoga och ta bort objekt från var som helst vid konstant tid.
- Det implementeras som en dubbel-länk
- Std :: listdata kan nås i två riktningar och sekventiellt.
- std :: list stöder inte snabb slumpmässig åtkomst. Det stöder dock sekventiell åtkomst från alla riktningar.
- Du kan sprida listelement av std :: list i olika minnesbitar.
- Du kan krympa eller expandera std :: list från båda ändar efter behov under körning.
- För att infoga objekt i std :: list använder vi funktionen insert ().
- För att ta bort objekt från listan std :: använder vi funktionen radera ().