std::liste inn C++ med eksempel
Hva er en std::list?
In C++, refererer std::listen til en lagringsbeholder. Std:list lar deg sette inn og fjerne elementer fra hvor som helst. Std::listen er implementert som en dobbeltlenket liste. Dette betyr at listedata kan nรฅs toveis og sekvensielt.
Standard malbibliotek-listen 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.
Hvorfor bruke std::list?
Her er grunnen til รฅ bruke std::List:
- Std::listen kan bedre sammenlignes med andre sekvensbeholdere som array og vektor.
- De har en bedre ytelse nรฅr det gjelder รฅ sette inn, flytte og trekke ut elementer fra enhver 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 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 typen element som finnes. Du kan erstatte T med hvilken som helst datatype, ogsรฅ brukerdefinerte typer.
- Alloc โ Definerer typen til allokatorobjektet. Dette bruker allocatorklassemalen som standard. Den er verdiavhengig og bruker en enkel minneallokeringsmodell.
Eksempler 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:
Kodeforklaring:
- 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 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.
- Slutten av kroppen til for slรธyfe.
- 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:
Kodeforklaring:
- 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 er forskjellige funksjoner som 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:
Kodeforklaring:
- 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.
Sletting fra en liste
Det er mulig รฅ slette elementer fra en liste. Erase()-funksjonen lar deg slette et element eller en rekke elementer fra en liste.
- For รฅ slette et enkelt element passerer du ganske enkelt รฉn heltallsposisjon. Elementet vil bli slettet.
- For รฅ slette et omrรฅde, passerer 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 skjermbilde av koden:
Kodeforklaring:
- 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.
Sammendrag
- Std::listen er en lagringsbeholder.
- Den tillater innsetting og sletting av elementer fra hvor som helst til konstant tid.
- Den er implementert som en dobbeltkobling
- Std::listedataene kan nรฅs toveis og sekvensielt.
- std::list stรธtter ikke rask tilfeldig tilgang. Den stรธtter imidlertid sekvensiell tilgang fra alle retninger.
- Du kan spre listeelementer av std::list i forskjellige minnebiter.
- Du kan krympe eller utvide std::list fra begge ender etter behov under kjรธring.
- For รฅ sette inn elementer i std::list bruker vi insert() funksjonen.
- For รฅ slette elementer fra std::listen bruker vi erase()-funksjonen.






