Hvad er en std :: liste?
I C ++ henviser std :: -listen til en lagerbeholder. Std: listen giver dig mulighed for at indsætte og fjerne emner hvor som helst. Std :: listen er implementeret som en dobbeltkoblet liste. Dette betyder, at listedata kan tilgås tovejs og sekventielt.
Standardskabelonbiblioteklisten understøtter ikke hurtig tilfældig adgang, men den understøtter sekventiel adgang fra alle retninger.
Du kan sprede listeelementer i forskellige hukommelsesstykker. De nødvendige oplysninger til sekventiel adgang til data er gemt i en container. Std :: -listen kan udvides og formindskes fra begge ender efter behov under løbetiden. En intern tildeler opfylder automatisk lagringskravene.
I denne C ++ tutorial lærer du:
- Hvad er en std :: liste?
- Hvorfor bruge std :: list?
- Liste syntaks
- C ++ listefunktioner
-
Konstruktører - Beholderegenskaber
- Indsættelse på en liste
- Sletning fra en liste
Hvorfor bruge std :: list?
Her er grunden til at bruge std :: Liste:
- Std :: -listen sammenlignes bedre med andre sekvensbeholdere som matrix og vektor.
- De har en bedre ydeevne i indsættelse, flytning og udtrækning af elementer fra enhver position.
- Std :: listen klarer sig også bedre med algoritmer, der udfører sådanne operationer intenst.
Liste syntaks
For at definere std :: -listen skal vi importere
headerfilen. Her er syntaks for std :: list definition:
template < class Type, class Alloc =allocator> class list;
Her er en beskrivelse af ovenstående parametre:
- T - Definerer den type element, der er indeholdt.
Du kan erstatte T med enhver datatype, selv brugerdefinerede typer.
- Alloc - Definerer typen af allokeringsobjektet.
Dette bruger som standard tildelerklasseskabelonen. Det er værdiafhængigt og bruger en simpel hukommelsesallokeringsmodel.
Eksempler 1:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}
Produktion:
Her er et screenshot af koden:
Kode Forklaring:
- Inkluder algoritmehovedfilen for at bruge dens funktioner.
- Inkluder iostream header-filen for at bruge dens funktioner.
- Inkluder listehovedfilen for at bruge dens funktioner.
- Ring til hovedfunktionen (). Programmets logik skal tilføjes inden for denne funktion.
- Opret en liste med navnet my_list med et sæt på 4 heltal.
- Brug en for-loop til at oprette en loop-variabel x. Denne variabel bruges til at gentage listenelementerne.
- Udskriv værdierne på listen på konsollen.
- Slutningen af kroppen til en løkke.
- Slutningen af hovedfunktionens () krop.
C ++ listefunktioner
Her er de almindelige std :: listefunktioner:
Fungere | Beskrivelse |
indsæt () | Denne funktion indsætter et nyt element inden den position iteratoren peger på. |
skub tilbage() | Disse funktioner tilføjer et nyt element i slutningen af listen. |
push_front () | Det tilføjer et nyt punkt foran på listen. |
pop_front () | Det sletter listens første punkt. |
størrelse() | Denne funktion bestemmer antallet af listeelementer. |
foran() | For at bestemme listens første emner. |
tilbage() | For at bestemme listen sidste punkt. |
baglæns() | Det vender listeelementerne. |
fusionere() | Den fletter to sorterede lister. |
Konstruktører
Her er listen over funktioner leveret af
headerfilen:
- Standardkonstruktør std :: liste :: liste () - Det opretter en tom liste, der med nul elementer.
- Udfyld konstruktør std :: liste :: liste () - Det opretter en liste med n elementer og tildeler en værdi på nul (0) til hvert element.
- Range constructor std :: list :: list () - opretter en liste med mange elementer i området først til sidst.
- Copy constructor std :: list :: list () - Det opretter en liste med en kopi af hvert element indeholdt i den eksisterende liste.
- Move constructor std :: list :: list () - opretter en liste med elementerne i en anden liste ved hjælp af move semantics.
- Initialisatorliste konstruktør std :: liste :: liste () - Det opretter en liste med elementerne i en anden liste ved hjælp af move semantics.
Eksempel 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:
Her er et screenshot af koden:
Kode Forklaring:
- Inkluder iostream header-filen for at bruge dens funktioner.
- Inkluder listehovedfilen for at bruge dens funktioner.
- Inkluder std navneområdet i koden for at bruge dets klasser uden at kalde det.
- Ring til hovedfunktionen (). Programmets logik skal tilføjes inden for denne funktion.
- Opret en tom liste med navnet l.
- Opret en liste med navnet l1 med et sæt på 3 heltal.
- Opret en liste med navnet l2 med alle elementer på listen med navnet l1, fra begyndelsen til slutningen.
- Opret en liste med navnet l3 ved hjælp af move semantics. Listen l3 vil have samme indhold som listen l2.
- Udskriv størrelsen på listen med navnet l på konsollen sammen med anden tekst.
- Udskriv tekst på konsollen.
- Opret en iterator, der hedder den, og brug den til at gentage elementerne på listen med navnet l2.
- Udskriv elementerne på listen med navnet l2 på konsollen.
- Udskriv tekst på konsollen.
- Opret en iterator, der hedder den, og brug den til at gentage elementerne på listen med navnet l3.
- Udskriv elementerne på listen med navnet l3 på konsollen.
- Programmet skal returnere værdi efter vellykket afslutning.
- Slutningen af hovedfunktionens () krop.
Beholderegenskaber
Her er listen over containeregenskaber:
Ejendom | Beskrivelse |
Sekvens | Sekvensbeholdere bestiller deres elementer i en streng lineær sekvens. Der er adgang til elementer ved deres position i sekvensen. |
Dobbeltkædet liste | Hvert element har information om, hvordan man finder de forrige og de næste elementer. Dette giver konstant tid til indsættelse og sletning. |
Allocator-opmærksom | Et allokeringsobjekt bruges til at ændre lagringsstørrelsen dynamisk. |
Indsættelse på en liste
Der er forskellige funktioner, som vi kan bruge til at indsætte værdier i en liste. Lad os demonstrere dette:
Eksempel 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:
Her er et screenshot af koden:
Kode Forklaring:
- Inkluder algoritmehovedfilen for at bruge dens funktioner.
- Inkluder iostream header-filen for at bruge dens funktioner.
- Inkluder listehovedfilen for at bruge dens funktioner.
- Ring til hovedfunktionen (). Programmets logik skal tilføjes inden for denne funktion.
- Opret en liste med navnet my_list med et sæt på 4 heltal.
- Indsæt elementet 11 foran på listen med navnet my_list.
- Indsæt element 18 i slutningen af listen med navnet my_list.
- Opret en iterator, og brug den til at finde elementet 10 fra listen my_list.
- Brug en if-sætning til at afgøre, om ovenstående element blev fundet eller ej.
- Indsæt element 21 før ovennævnte element, hvis det blev fundet.
- Slutningen af if-erklæringen.
- Brug en for-loop til at oprette en loop-variabel x. Denne variabel bruges til at gentage listenelementerne.
- Udskriv værdierne på listen på konsollen.
- Slutningen af kroppen til en løkke.
- Slutningen af hovedfunktionens () krop.
Sletning fra en liste
Det er muligt at slette emner fra en liste. Slet () -funktionen giver dig mulighed for at slette et emne eller en række emner fra en liste.
- For at slette et enkelt element skal du blot passere en heltalsposition. Elementet slettes.
- For at slette et interval, passerer du start- og slutteriteratorerne. Lad os demonstrere dette.
Eksempel 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:
Her er skærmbillede af koden:
Kode Forklaring:
- Inkluder algoritmehovedfilen for at bruge dens funktioner.
- Inkluder iostream header-filen for at bruge dens funktioner.
- Inkluder listehovedfilen for at bruge dens funktioner.
- Inkluder std navneområdet i vores program for at bruge dets klasser uden at kalde det.
- Ring til hovedfunktionen (). Programmets logik skal tilføjes inden for denne funktion.
- Opret en liste med navnet my_list med et sæt på 4 heltal.
- Udskriv tekst på konsollen.
- Brug en for-loop til at oprette en loop-variabel x. Denne variabel bruges til at gentage listenelementerne.
- Udskriv værdierne på listen på konsollen.
- Slutningen af for-sløjfens krop.
- Opret en iterator i, der peger på det første element på listen.
- Brug sletningen () -funktionen peget af iteratoren i.
- Udskriv tekst på konsollen.
- Brug en for-loop til at oprette en loop-variabel x. Denne variabel bruges til at gentage listenelementerne.
- Udskriv værdierne på listen på konsollen. Dette kommer efter sletning.
- Slutningen af for-sløjfens krop.
- Programmet skal returnere en værdi, når den er gennemført.
- Slutningen af hovedfunktionens () krop.
Resumé:
- Std :: -listen er en opbevaringsbeholder.
- Det tillader indsættelse og sletning af varer fra hvor som helst på konstant tid.
- Det er implementeret som et dobbelt-link
- Std :: -listedataene kan tilgås tovejs og sekventielt.
- std :: liste understøtter ikke hurtig tilfældig adgang. Det understøtter dog sekventiel adgang fra alle retninger.
- Du kan sprede listeelementer af std :: liste i forskellige hukommelsesstykker.
- Du kan krympe eller udvide std :: -listen fra begge ender efter behov i løbetid.
- For at indsætte emner i std :: -listen bruger vi indsættelsesfunktionen ().
- For at slette emner fra std :: -listen bruger vi funktionen erase ().