std::liste inn C++ med eksempel
โก Smart oppsummering
std::liste inn C++ er en sekvensbeholder implementert som en dobbeltlenket liste, som muliggjรธr rask innsetting og sletting pรฅ enhver posisjon samtidig som elementer lagres i ikke-sammenhengende minne og stรธtter toveis sekvensiell tilgang i stedet for tilfeldig tilgang.

Hva er en std::list?
In C++, refererer std::list til en lagringsbeholder. std::list lar deg sette inn og fjerne elementer fra hvor som helst. std::list er implementert som en dobbeltlenket 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 beholder. Std::listen kan utvides og krympes fra begge ender etter behov under kjรธring. En intern allokator oppfyller automatisk lagringskravene.
Disse trekkene reiser et praktisk spรธrsmรฅl: nรฅr bรธr du egentlig ta en liste?
Hvorfor bruke std::list?
Her er grunnene til รฅ bruke std::list:
- std::list gjรธr det bedre sammenlignet med andre sekvenscontainere som array og vector.
- De har bedre ytelse nรฅr det gjelder รฅ sette inn, flytte og ekskluderetracelementer fra enhver posisjon.
- Std::listen gjรธr det ogsรฅ bedre med algoritmer som utfรธrer slike operasjoner intensivt.
Med รฅrsakene klare, er neste trinn syntaksen som deklarerer en.
Liste syntaks
For รฅ definere std::listen, mรฅ vi importere header-fil. Her er std::list definisjonssyntaks:
template < class Type, class Alloc =allocator<T> > class list;
Her er en beskrivelse av parameterne ovenfor:
- T โ Definerer elementtypen som inngรฅr. Du kan erstatte T med en hvilken som helst datatype, selv brukerdefinerte typer.
- Alloc โ Definerer typen allocator-objekt. Dette bruker allocator-klassemalen som standard. Det er verdiavhengig og bruker en enkel minneallokeringsmodell.
Eksempel 1
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; for (int x : my_list) { std::cout << x << '\n'; } }
Utgang:
Her er et skjermbilde av koden:
Code Forklaring:
- Inkluder algoritmehodefilen for รฅ bruke funksjonene.
- Inkluder iostream-headerfilen for รฅ bruke funksjonene.
- Inkluder listeoverskriftsfilen for รฅ bruke funksjonene.
- Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
- Lag en liste kalt min_liste med et sett med 4 heltall.
- Bruk for slรธyfe for รฅ opprette en lรธkkevariabel x. Denne variabelen vil bli brukt til รฅ iterere over listeelementene.
- Skriv ut verdiene til listen pรฅ konsollen.
- Enden av kroppen til for-lรธkken.
- Slutten av hoveddelen av hoved()-funksjonen.
C++ Liste funksjoner
Her er de vanlige std::list-funksjonene:
| Funksjon | Tekniske beskrivelser |
|---|---|
| sett inn() | Denne funksjonen setter inn et nytt element fรธr posisjonen iteratoren peker pรฅ. |
| push_back() | Denne funksjonen legger til et nytt element pรฅ slutten av listen. |
| push_front() | Den legger til et nytt element foran pรฅ listen. |
| pop_front() | Det 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 slรฅr sammen to sorterte lister. |
Konstruktรธrer
Her er listen over funksjoner levert av header-fil:
- Standard konstruktรธr std::list::list()- Den lager en tom liste, det, med null elementer.
- Fyll konstruktรธr std::list::list()- Den lager en liste med n elementer og tildeler en verdi pรฅ null (0) til hvert element.
- Omrรฅdekonstruktรธr std::list::list()- oppretter en liste med mange elementer i omrรฅdet fra fรธrst til sist.
- Kopier konstruktรธr std::list::list()- Den lager 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 รฅ bruke flyttesemantikk.
- Initialiseringsliste-konstruktรธr std::list::list()-Den lager en liste med elementene i en annen liste ved รฅ bruke flyttesemantikk.
Eksempel 2
#include <iostream> #include <list> using namespace std; int main(void) { list<int> l; list<int> l1 = { 10, 20, 30 }; list<int> l2(l1.begin(), l1.end()); list<int> 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; }
Utgang:
Her er et skjermbilde av koden:
Code Forklaring:
- Inkluder iostream-headerfilen for รฅ bruke funksjonene.
- Inkluder listeoverskriftsfilen for รฅ bruke funksjonene.
- Inkluder std-navneomrรฅdet i koden for รฅ bruke klassene uten รฅ kalle det.
- Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
- Lag en tom liste med navnet l.
- Lag en liste med navnet l1 med et sett med 3 heltall.
- Lag en liste med navnet l2 med alle elementene i listen kalt l1, fra begynnelsen til slutten.
- Lag en liste med navnet l3 ved รฅ bruke bevegelsessemantikk. Listen l3 vil ha samme innhold som listen l2.
- Skriv ut stรธrrelsen pรฅ listen kalt 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 som heter 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 som heter l3 pรฅ konsollen.
- Programmet mรฅ returnere verdi ved vellykket gjennomfรธring.
- Slutten av hoveddelen av hoved()-funksjonen.
Beholderegenskaper
Her er listen over beholderegenskaper:
| Eiendom | Tekniske beskrivelser |
|---|---|
| Sequence | Sekvensbeholdere bestiller elementene sine i en streng lineรฆr sekvens. Elementer er tilgjengelige ved deres plassering i sekvensen. |
| Dobbeltlenket liste | Hvert element har informasjon om hvordan du finner forrige og neste elementer. Dette gir konstant tid for innsetting og sletting. |
| Fordeler-bevisst | Et allokeringsobjekt brukes til รฅ endre lagringsstรธrrelsen dynamisk. |
Setter inn i en liste
Det finnes forskjellige funksjoner vi kan bruke for รฅ sette inn verdier i en liste. La oss demonstrere dette:
Eksempel 3
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> 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'; } }
Utgang:
Her er et skjermbilde av koden:
Code Forklaring:
- Inkluder algoritmehodefilen for รฅ bruke funksjonene.
- Inkluder iostream-headerfilen for รฅ bruke funksjonene.
- Inkluder listeoverskriftsfilen for รฅ bruke funksjonene.
- Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
- Lag en liste kalt min_liste med et sett med 4 heltall.
- Sett inn element 11 foran pรฅ listen som heter min_liste.
- Sett inn element 18 til slutten av listen som heter min_liste.
- Lag en iterator den og bruk den til รฅ finne element 10 fra listen my_list.
- Bruk en if-setning for รฅ finne ut om elementet ovenfor ble funnet eller ikke.
- Sett inn element 21 fรธr elementet ovenfor hvis det ble funnet.
- Slutten av brรธdteksten til if-setningen.
- Bruk en for-lรธkke for รฅ lage en lรธkkevariabel x. Denne variabelen vil bli brukt til รฅ iterere over listeelementene.
- Skriv ut verdiene til listen pรฅ konsollen.
- Enden av kroppen av for en lรธkke.
- Slutten av hoveddelen av hoved()-funksjonen.
Elementer som skal inn i en liste kan like gjerne tas ut.
Sletting fra en liste
Det er mulig รฅ slette elementer fra en liste. Funksjonen erase() lar deg slette et element eller et omrรฅde med elementer fra en liste.
- For รฅ slette et enkelt element passerer du ganske enkelt รฉn heltallsposisjon. Elementet vil bli slettet.
- For รฅ slette et omrรฅde, sender du start- og sluttiteratorene. La oss demonstrere dette.
Eksempel 4
#include <algorithm> #include <iostream> #include <list> using namespace std; int main() { std::list<int> my_list = { 12, 5, 10, 9 }; cout << "List elements before deletion: "; for (int x : my_list) { std::cout << x << '\n'; } list<int>::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; }
Utgang:
Her er et skjermbilde av koden:
Code Forklaring:
- Inkluder algoritmehodefilen for รฅ bruke funksjonene.
- Inkluder iostream-headerfilen for รฅ bruke funksjonene.
- Inkluder listeoverskriftsfilen for รฅ bruke funksjonene.
- Inkluder std-navneomrรฅdet i programmet vรฅrt for รฅ bruke klassene uten รฅ kalle det.
- Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
- Lag en liste kalt min_liste med et sett med 4 heltall.
- Skriv ut litt tekst pรฅ konsollen.
- Bruk en for-lรธkke for รฅ lage en lรธkkevariabel x. Denne variabelen vil bli brukt til รฅ iterere over listeelementene.
- Skriv ut verdiene til listen pรฅ konsollen.
- Enden av kroppen til for-lรธkken.
- Lag en iterator i som peker til det fรธrste elementet i listen.
- Bruk erase()-funksjonen pekt av iteratoren i.
- Skriv ut litt tekst pรฅ konsollen.
- Bruk en for-lรธkke for รฅ lage en lรธkkevariabel x. Denne variabelen vil bli brukt til รฅ iterere over listeelementene.
- Skriv ut verdiene til listen pรฅ konsollen. Dette kommer etter sletting.
- Enden av kroppen til for-lรธkken.
- Programmet mรฅ returnere en verdi ved vellykket gjennomfรธring.
- Slutten av hoveddelen av hoved()-funksjonen.






