Std :: lista i C ++ med exempel

Innehållsförteckning:

Anonim

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:

  1. Inkludera algoritmhuvudfilen för att använda dess funktioner.
  2. Inkludera iostream-rubrikfilen för att använda dess funktioner.
  3. Inkludera listhuvudfilen för att använda dess funktioner.
  4. Ring huvudfunktionen (). Programlogiken bör läggas till i denna funktion.
  5. Skapa en lista med namnet my_list med en uppsättning av fyra heltal.
  6. 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.
  7. Skriv ut värdena på listan på konsolen.
  8. Slutet på kroppen för en slinga.
  9. 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:

  1. Inkludera iostream-rubrikfilen för att använda dess funktioner.
  2. Inkludera listhuvudfilen för att använda dess funktioner.
  3. Inkludera std-namnområdet i koden för att använda dess klasser utan att anropa det.
  4. Ring huvudfunktionen (). Programlogiken bör läggas till i denna funktion.
  5. Skapa en tom lista med namnet l.
  6. Skapa en lista med namnet l1 med en uppsättning av tre heltal.
  7. Skapa en lista med namnet l2 med alla element i listan l1, från början till slutet.
  8. Skapa en lista med namnet l3 med move semantics. Listan l3 kommer att ha samma innehåll som listan l2.
  9. Skriv ut storleken på listan med namnet l på konsolen tillsammans med annan text.
  10. Skriv ut lite text på konsolen.
  11. Skapa en iterator som heter den och använd den för att itera över elementen i listan som heter l2.
  12. Skriv ut elementen i listan l2 på konsolen.
  13. Skriv ut lite text på konsolen.
  14. Skapa en iterator som heter den och använd den för att itera över elementen i listan med namnet l3.
  15. Skriv ut elementen i listan med namnet l3 på konsolen.
  16. Programmet måste returnera värde när det är klart.
  17. 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:

  1. Inkludera algoritmhuvudfilen för att använda dess funktioner.
  2. Inkludera iostream-rubrikfilen för att använda dess funktioner.
  3. Inkludera listhuvudfilen för att använda dess funktioner.
  4. Ring huvudfunktionen (). Programlogiken bör läggas till i denna funktion.
  5. Skapa en lista med namnet my_list med en uppsättning av fyra heltal.
  6. Sätt in elementet 11 längst fram i listan med namnet my_list.
  7. Infoga element 18 i slutet av listan med namnet my_list.
  8. Skapa en iterator och använd den för att hitta elementet 10 från listan my_list.
  9. Använd ett if-uttalande för att avgöra om ovanstående element hittades eller inte.
  10. Sätt in element 21 före ovanstående element om det hittades.
  11. Slutet på kroppen om if-uttalandet.
  12. 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.
  13. Skriv ut värdena på listan på konsolen.
  14. Slutet på kroppen för en slinga.
  15. 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:

  1. Inkludera algoritmhuvudfilen för att använda dess funktioner.
  2. Inkludera iostream-rubrikfilen för att använda dess funktioner.
  3. Inkludera listhuvudfilen för att använda dess funktioner.
  4. Inkludera std-namnområdet i vårt program för att använda sina klasser utan att kalla det.
  5. Ring huvudfunktionen (). Programlogiken bör läggas till i denna funktion.
  6. Skapa en lista med namnet my_list med en uppsättning av fyra heltal.
  7. Skriv ut lite text på konsolen.
  8. 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.
  9. Skriv ut värdena på listan på konsolen.
  10. Slutet på for-loopens kropp.
  11. Skapa en iterator i som pekar på det första elementet i listan.
  12. Använd radera () -funktionen som pekas av iteratorn i.
  13. Skriv ut lite text på konsolen.
  14. 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.
  15. Skriv ut värdena på listan på konsolen. Detta kommer efter radering.
  16. Slutet på for-loopens kropp.
  17. Programmet måste returnera ett värde när det är klart.
  18. 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 ().