Hva er en std :: liste?
I C ++ refererer std :: -listen til en lagringsbeholder. Std: -listen lar deg sette inn og fjerne elementer hvor som helst. Std :: -listen er implementert som en dobbeltkoblet liste. Dette betyr at listedata kan nås toveis og sekvensielt.
Standardmalbiblioteklisten støtter ikke rask tilfeldig tilgang, men den støtter sekvensiell tilgang fra alle retninger.
Du kan spre listeelementer i forskjellige minnebiter. Informasjonen som trengs for sekvensiell tilgang til data lagres i en container. Std :: -listen kan utvides og krympe fra begge ender etter behov i løpetid. En intern tildeler oppfyller automatisk lagringskravene.
I denne C ++ opplæringen vil du lære:
- Hva er en std :: liste?
- Hvorfor bruke std :: list?
- Liste syntaks
- C ++ Listefunksjoner
-
Konstruktører - Beholderegenskaper
- Sette inn i en liste
- Slette fra en liste
Hvorfor bruke std :: list?
Her er grunn til å bruke std :: Liste:
- Std :: -listen sammenligner seg bedre med andre sekvensbeholdere som matrise og vektor.
- De har bedre ytelse i å sette inn, flytte og trekke ut elementer fra hvilken som helst posisjon.
- Std :: -listen gjør det også bedre med algoritmer som utfører slike operasjoner intensivt.
Liste syntaks
For å definere std :: -listen, må vi importere
headerfilen. Her er std :: liste definisjon syntaks:
template < class Type, class Alloc =allocator> class list;
Her er en beskrivelse av parametrene ovenfor:
- T - Definerer typen element som finnes.
Du kan erstatte T med hvilken som helst datatype, til og med brukerdefinerte typer.
- Alloc - Definerer typen tildelingsobjekt.
Dette bruker tildelingsklasmalen som standard. Det er verdiavhengig og bruker en enkel minnetildelingsmodell.
Eksempler 1:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}
Produksjon:
Her er et skjermbilde av koden:
Kode Forklaring:
- Inkluder algoritmens topptekstfil for å bruke funksjonene.
- Inkluder iostream header-filen for å bruke funksjonene.
- Inkluder topptekstfilen for å bruke funksjonene.
- Ring til hovedfunksjonen (). Programlogikken skal legges til i kroppen til denne funksjonen.
- Lag en liste med navnet my_list med et sett med 4 heltall.
- Bruk en for loop til å lage en loop variabel x. Denne variabelen vil bli brukt til å gjenta over listeelementene.
- Skriv ut verdiene til listen på konsollen.
- Slutten av kroppen til en løkke.
- Slutten av kroppen til hovedfunksjonen ().
C ++ Listefunksjoner
Her er de vanlige std :: listefunksjonene:
Funksjon | Beskrivelse |
sett inn() | Denne funksjonen setter inn et nytt element før posisjonen iteratoren peker på. |
push_back () | Disse funksjonene legger til et nytt element på slutten av listen. |
push_front () | Det legger til et nytt element foran listen. |
pop_front () | Den sletter listens første element. |
størrelse() | Denne funksjonen bestemmer antall listeelementer. |
front() | For å bestemme listens første elementer. |
tilbake() | For å bestemme listens siste element. |
omvendt() | Det reverserer listeelementene. |
slå sammen() | Den smelter sammen to sorterte lister. |
Konstruktører
Her er listen over funksjoner levert av
header-filen:
- Standard konstruktør std :: liste :: liste () - Den oppretter en tom liste, med null elementer.
- Fyll konstruktør std :: liste :: liste () - Den oppretter en liste med n elementer og tildeler en verdi på null (0) til hvert element.
- Range constructor std :: list :: list () - oppretter en liste med mange elementer i området først til siste.
- Copy constructor std :: list :: list () - Den oppretter en liste med en kopi av hvert element i den eksisterende listen.
- Move constructor std :: list :: list () - oppretter en liste med elementene i en annen liste ved hjelp av move semantics.
- Initialisatorliste konstruktør std :: liste :: liste () - Den oppretter en liste med elementene i en annen liste ved hjelp av flyttesemantikk.
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;}
Produksjon:
Her er et skjermbilde av koden:
Kode Forklaring:
- Inkluder iostream header-filen for å bruke funksjonene.
- Inkluder topptekstfilen for å bruke funksjonene.
- Inkluder std navneområdet i koden for å bruke klassene uten å kalle det.
- Ring til hovedfunksjonen (). Programlogikken skal legges til i kroppen til denne funksjonen.
- Opprett en tom liste med navnet l.
- Lag en liste med navnet l1 med et sett med tre heltall.
- Lag en liste med navnet l2 med alle elementene i listen med navnet l1, fra begynnelse til slutt.
- Lag en liste med navnet l3 ved hjelp av move semantics. Listen l3 vil ha samme innhold som listen l2.
- Skriv ut størrelsen på listen som heter l på konsollen sammen med annen tekst.
- Skriv ut litt tekst på konsollen.
- Lag en iterator som heter den, og bruk den til å iterere over elementene i listen som heter l2.
- Skriv ut elementene i listen med navnet l2 på konsollen.
- Skriv ut litt tekst på konsollen.
- Lag en iterator som heter den, og bruk den til å iterere over elementene i listen som heter l3.
- Skriv ut elementene i listen med navnet l3 på konsollen.
- Programmet må returnere verdi etter vellykket gjennomføring.
- Slutten av kroppen til hovedfunksjonen ().
Beholderegenskaper
Her er listen over containeregenskaper:
Eiendom | Beskrivelse |
Sekvens | Sekvensbeholdere bestiller elementene i en streng lineær sekvens. Du får tilgang til elementer ved å plassere dem i sekvensen. |
Dobbeltkoblet liste | Hvert element har informasjon om hvordan du finner tidligere og neste elementer. Dette gir konstant tid for innsetting og sletting. |
Allokator-bevisst | Et allokeringsobjekt brukes til å modifisere lagringsstørrelsen dynamisk. |
Sette inn i en liste
Det er forskjellige funksjoner som vi kan bruke til å sette inn verdier i en liste. La oss 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';}}
Produksjon:
Her er et skjermbilde av koden:
Kode Forklaring:
- Inkluder algoritmens topptekstfil for å bruke funksjonene.
- Inkluder iostream header-filen for å bruke funksjonene.
- Inkluder topptekstfilen for å bruke funksjonene.
- Ring til hovedfunksjonen (). Programlogikken skal legges til i kroppen til denne funksjonen.
- Lag en liste med navnet my_list med et sett med 4 heltall.
- Sett inn elementet 11 foran på listen som heter min_liste.
- Sett inn element 18 til slutten av listen som heter my_list.
- Lag en iterator den og bruk den til å finne elementet 10 fra listen my_list.
- Bruk en if-setning for å avgjøre om elementet ovenfor ble funnet eller ikke.
- Sett inn element 21 før elementet ovenfor hvis det ble funnet.
- Slutten på kroppen til if-setningen.
- Bruk en for loop til å lage en loop variabel x. Denne variabelen vil bli brukt til å gjenta over listeelementene.
- Skriv ut verdiene til listen på konsollen.
- Slutten av kroppen til en løkke.
- Slutten av kroppen til hovedfunksjonen ().
Slette fra en liste
Det er mulig å slette elementer fra en liste. Slette () -funksjonen lar deg slette et element eller et utvalg av elementer fra en liste.
- For å slette et enkelt element, passerer du bare ett heltallsposisjon. Elementet blir slettet.
- For å slette et område, passerer du start- og avslutningsiteratorene. La oss 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;}
Produksjon:
Her er skjermbilde av koden:
Kode Forklaring:
- Inkluder algoritmens topptekstfil for å bruke funksjonene.
- Inkluder iostream header-filen for å bruke funksjonene.
- Inkluder topptekstfilen for å bruke funksjonene.
- Inkluder std navneområdet i programmet vårt for å bruke klassene uten å kalle det.
- Ring til hovedfunksjonen (). Programlogikken skal legges til i kroppen til denne funksjonen.
- Lag en liste med navnet my_list med et sett med 4 heltall.
- Skriv ut litt tekst på konsollen.
- Bruk en for loop til å lage en loop variabel x. Denne variabelen vil bli brukt til å gjenta over listeelementene.
- Skriv ut verdiene til listen på konsollen.
- Enden på kroppen til forløkken.
- Lag en iterator i som peker på det første elementet i listen.
- Bruk slett () -funksjonen pekt av iteratoren i.
- Skriv ut litt tekst på konsollen.
- Bruk en for loop til å lage en loop variabel x. Denne variabelen vil bli brukt til å gjenta over listeelementene.
- Skriv ut verdiene til listen på konsollen. Dette kommer etter sletting.
- Enden på kroppen til forløkken.
- Programmet må returnere en verdi etter vellykket gjennomføring.
- Slutten av kroppen til hovedfunksjonen ().
Sammendrag:
- Std :: -listen er en lagringsbeholder.
- Det tillater innsetting og sletting av varer fra hvor som helst til konstant tid.
- Den er implementert som en dobbelt-kobling
- Std :: listedataene kan nås toveis og sekvensielt.
- std :: list støtter ikke rask tilfeldig tilgang. Imidlertid støtter den sekvensiell tilgang fra alle retninger.
- Du kan spre listeelementer av std :: liste i forskjellige minnebiter.
- Du kan krympe eller utvide std :: -listen fra begge ender etter behov i løpetid.
- For å sette inn elementer i std :: list bruker vi funksjonen insert ().
- For å slette elementer fra std :: -listen bruker vi slett () -funksjonen.