std::liste ind C++ med Eksempel
Hvad er en std::list?
In C++, refererer std::listen til en lagerbeholder. Std:listen giver dig mulighed for at indsรฆtte og fjerne elementer hvor som helst. Std::listen er implementeret som en dobbelt-linket liste. Dette betyder, at listedata kan tilgรฅs tovejs og sekventielt.
Standardskabelonbibliotekslisten understรธtter ikke hurtig tilfรฆldig adgang, men den understรธtter sekventiel adgang fra alle retninger.
Du kan sprede listeelementer i forskellige hukommelsesbidder. De nรธdvendige oplysninger til sekventiel adgang til data gemmes i en container. Std::listen kan udvides og krympes fra begge ender efter behov under kรธrsel. En intern allokator opfylder automatisk lagerkravene.
Hvorfor bruge std::list?
Her er grundene til at bruge std::List:
- Std::listen kan bedre sammenlignes med andre sekvensbeholdere som array og vektor.
- De har en bedre ydeevne til at indsรฆtte, flytte og udtrรฆkke elementer fra enhver position.
- Std::listen klarer sig ogsรฅ bedre med algoritmer, der udfรธrer sรฅdanne operationer intensivt.
Liste syntaks
For at definere std::listen skal vi importere header-fil. Her er syntaksen for std::list definition:
template < class Type, class Alloc =allocator<T> > class list;
Her er en beskrivelse af ovenstรฅende parametre:
- T โ Definerer typen af โโindeholdt element. Du kan erstatte T med enhver datatype, selv brugerdefinerede typer.
- Alloc โ Definerer typen af โโallokeringsobjektet. Dette bruger som standard allocatorklasseskabelonen. Den er vรฆrdiafhรฆngig og bruger en simpel hukommelsesallokeringsmodel.
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';
}
}
Output:
Her er et skรฆrmbillede af koden:
Kodeforklaring:
- Inkluder algoritmehovedfilen for at bruge dens funktioner.
- Inkluder iostream-header-filen for at bruge dens funktioner.
- Inkluder listehovedfilen for at bruge dens funktioner.
- Kald funktionen main(). Programlogikken skal tilfรธjes i denne funktions brรธdtekst.
- Opret en liste med navnet min_liste med et sรฆt pรฅ 4 heltal.
- Brug en for-lรธkke til at oprette en lรธkkevariabel x. Denne variabel vil blive brugt til at iterere over listeelementerne.
- Udskriv vรฆrdierne af listen pรฅ konsollen.
- Slutningen af โโkroppen af til lรธkke.
- Slutningen af โโhoveddelen af โโfunktionen main().
C++ Liste funktioner
Her er de almindelige std::list funktioner:
| Funktion | Beskrivelse |
|---|---|
| indsรฆt () | Denne funktion indsรฆtter et nyt element fรธr den position, som iteratoren peger pรฅ. |
| skub tilbage() | Denne funktion tilfรธjer et nyt element i slutningen af โโlisten. |
| push_front() | Den tilfรธjer et nyt element 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 punkter. |
| tilbage() | For at bestemme listens sidste punkt. |
| baglรฆns() | Det vender listepunkterne om. |
| fusionere() | Den fletter to sorterede lister. |
Konstruktรธrer
Her er listen over funktioner leveret af header fil:
- Standard konstruktรธr std::list::list()- Den opretter en tom liste, det, med nul elementer.
- Fill constructor std::list::list()- Den 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 fra fรธrst til sidst.
- Kopier konstruktรธr std::list::list()- Den opretter en liste med en kopi af hvert element indeholdt i den eksisterende liste.
- Move constructor std::list::list()- opretter en liste med elementerne fra en anden liste ved hjรฆlp af move semantik.
- Initializer liste constructor std::list::list()-Den opretter en liste med elementerne fra en anden liste ved hjรฆlp af move semantik.
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;
}
Output:
Her er et skรฆrmbillede af koden:
Kodeforklaring:
- 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.
- Kald funktionen main(). Programlogikken skal tilfรธjes i denne funktions brรธdtekst.
- Opret en tom liste med navnet l.
- Opret en liste med navnet l1 med et sรฆt pรฅ 3 heltal.
- Opret en liste ved navn l2 med alle elementer i listen ved navn 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 af โโlisten med navnet l pรฅ konsollen sammen med anden tekst.
- Udskriv noget tekst pรฅ konsollen.
- Opret en iterator ved navn det, og brug den til at iterere over elementerne pรฅ listen med navnet l2.
- Udskriv elementerne i listen med navnet l2 pรฅ konsollen.
- Udskriv noget tekst pรฅ konsollen.
- Opret en iterator ved navn det, og brug den til at iterere over elementerne pรฅ listen med navnet l3.
- Udskriv elementerne i listen med navnet l3 pรฅ konsollen.
- Programmet skal returnere vรฆrdi efter vellykket afslutning.
- Slutningen af โโhoveddelen af โโfunktionen main().
Beholderegenskaber
Her er listen over containeregenskaber:
| Ejendom | Beskrivelse |
|---|---|
| Sequence | Sekvensbeholdere bestiller deres elementer i en streng lineรฆr rรฆkkefรธlge. Elementer tilgรฅs ved deres placering i sekvensen. |
| Dobbelt-linket liste | Hvert element har information om, hvordan man finder tidligere og nรฆste elementer. Dette giver mulighed for konstant tid til indsรฆttelse og sletning. |
| Fordeler-bevidst | Et allokeringsobjekt bruges til at รฆndre lagerstรธrrelsen dynamisk. |
Indsรฆttelse i 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 <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';
}
}
Output:
Her er et skรฆrmbillede af koden:
Kodeforklaring:
- Inkluder algoritmehovedfilen for at bruge dens funktioner.
- Inkluder iostream-header-filen for at bruge dens funktioner.
- Inkluder listehovedfilen for at bruge dens funktioner.
- Kald funktionen main(). Programlogikken skal tilfรธjes i denne funktions brรธdtekst.
- Opret en liste med navnet min_liste med et sรฆt pรฅ 4 heltal.
- Indsรฆt element 11 foran pรฅ listen med navnet my_list.
- Indsรฆt element 18 til slutningen af โโlisten med navnet min_liste.
- 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 ovenstรฅende element, hvis det blev fundet.
- Slutningen af โโbrรธdteksten i if-erklรฆringen.
- Brug en for-lรธkke til at oprette en lรธkkevariabel x. Denne variabel vil blive brugt til at iterere over listeelementerne.
- Udskriv vรฆrdierne af listen pรฅ konsollen.
- Enden af โโkroppen af โโfor en lรธkke.
- Slutningen af โโhoveddelen af โโfunktionen main().
Sletning fra en liste
Det er muligt at slette elementer fra en liste. Erase()-funktionen giver dig mulighed for at slette et element eller en rรฆkke elementer fra en liste.
- For at slette et enkelt element passerer du blot en heltalsposition. Varen vil blive slettet.
- For at slette et omrรฅde skal du videregive start- og slutiteratorerne. Lad os 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;
}
Output:
Her er et skรฆrmbillede af koden:
Kodeforklaring:
- 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.
- Kald funktionen main(). Programlogikken skal tilfรธjes i denne funktions brรธdtekst.
- Opret en liste med navnet min_liste med et sรฆt pรฅ 4 heltal.
- Udskriv noget tekst pรฅ konsollen.
- Brug en for-lรธkke til at oprette en lรธkkevariabel x. Denne variabel vil blive brugt til at iterere over listeelementerne.
- Udskriv vรฆrdierne af listen pรฅ konsollen.
- Enden af โโkroppen af โโfor-lรธkken.
- Opret en iterator i, der peger pรฅ det fรธrste element pรฅ listen.
- Brug funktionen erase() peget af iteratoren i.
- Udskriv noget tekst pรฅ konsollen.
- Brug en for-lรธkke til at oprette en lรธkkevariabel x. Denne variabel vil blive brugt til at iterere over listeelementerne.
- Udskriv vรฆrdierne af listen pรฅ konsollen. Dette kommer efter sletning.
- Enden af โโkroppen af โโfor-lรธkken.
- Programmet skal returnere en vรฆrdi efter vellykket afslutning.
- Slutningen af โโhoveddelen af โโfunktionen main().
Resumรฉ
- std::listen er en lagerbeholder.
- Det tillader indsรฆttelse og sletning af elementer fra hvor som helst pรฅ konstant tid.
- Det er implementeret som et dobbelt-link
- Std::list data kan tilgรฅs tovejs og sekventielt.
- std::list understรธtter ikke hurtig tilfรฆldig adgang. Det understรธtter dog sekventiel adgang fra alle retninger.
- Du kan sprede listeelementer af std::list i forskellige hukommelsesbidder.
- Du kan formindske eller udvide std::list fra begge ender efter behov under kรธrsel.
- For at indsรฆtte elementer i std::list, bruger vi funktionen insert().
- For at slette elementer fra std::listen bruger vi erase()-funktionen.






