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:

std::liste

Her er et skærmbillede af koden:

std::liste

Kodeforklaring:

  1. Inkluder algoritmehovedfilen for at bruge dens funktioner.
  2. Inkluder iostream-header-filen for at bruge dens funktioner.
  3. Inkluder listehovedfilen for at bruge dens funktioner.
  4. Kald funktionen main(). Programlogikken skal tilføjes i denne funktions brødtekst.
  5. Opret en liste med navnet min_liste med et sæt på 4 heltal.
  6. Brug en for-løkke til at oprette en løkkevariabel x. Denne variabel vil blive brugt til at iterere over listeelementerne.
  7. Udskriv værdierne af listen på konsollen.
  8. Slutningen af ​​kroppen af til løkke.
  9. Slutningen af ​​hoveddelen af ​​funktionen main().

C++ Liste funktioner

Her er de almindelige std::list funktioner:

Funktion Produktbeskrivelse
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:

liste konstruktører

Her er et skærmbillede af koden:

liste konstruktører

Kodeforklaring:

  1. Inkluder iostream-header-filen for at bruge dens funktioner.
  2. Inkluder listehovedfilen for at bruge dens funktioner.
  3. Inkluder std-navneområdet i koden for at bruge dets klasser uden at kalde det.
  4. Kald funktionen main(). Programlogikken skal tilføjes i denne funktions brødtekst.
  5. Opret en tom liste med navnet l.
  6. Opret en liste med navnet l1 med et sæt på 3 heltal.
  7. Opret en liste ved navn l2 med alle elementer i listen ved navn l1, fra begyndelsen til slutningen.
  8. Opret en liste med navnet l3 ved hjælp af move semantics. Listen l3 vil have samme indhold som listen l2.
  9. Udskriv størrelsen af ​​listen med navnet l på konsollen sammen med anden tekst.
  10. Udskriv noget tekst på konsollen.
  11. Opret en iterator ved navn det, og brug den til at iterere over elementerne på listen med navnet l2.
  12. Udskriv elementerne i listen med navnet l2 på konsollen.
  13. Udskriv noget tekst på konsollen.
  14. Opret en iterator ved navn det, og brug den til at iterere over elementerne på listen med navnet l3.
  15. Udskriv elementerne i listen med navnet l3 på konsollen.
  16. Programmet skal returnere værdi efter vellykket afslutning.
  17. Slutningen af ​​hoveddelen af ​​funktionen main().

Beholderegenskaber

Her er listen over containeregenskaber:

Ejendom Produktbeskrivelse
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:

Indsættelse i en liste

Her er et skærmbillede af koden:

Indsættelse i en liste

Kodeforklaring:

  1. Inkluder algoritmehovedfilen for at bruge dens funktioner.
  2. Inkluder iostream-header-filen for at bruge dens funktioner.
  3. Inkluder listehovedfilen for at bruge dens funktioner.
  4. Kald funktionen main(). Programlogikken skal tilføjes i denne funktions brødtekst.
  5. Opret en liste med navnet min_liste med et sæt på 4 heltal.
  6. Indsæt element 11 foran på listen med navnet my_list.
  7. Indsæt element 18 til slutningen af ​​listen med navnet min_liste.
  8. Opret en iterator, og brug den til at finde elementet 10 fra listen my_list.
  9. Brug en if-sætning til at afgøre, om ovenstående element blev fundet eller ej.
  10. Indsæt element 21 før ovenstående element, hvis det blev fundet.
  11. Slutningen af ​​brødteksten i if-erklæringen.
  12. Brug en for-løkke til at oprette en løkkevariabel x. Denne variabel vil blive brugt til at iterere over listeelementerne.
  13. Udskriv værdierne af listen på konsollen.
  14. Enden af ​​kroppen af ​​for en løkke.
  15. 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:

Sletning fra en liste

Her er et skærmbillede af koden:

Sletning fra en liste

Kodeforklaring:

  1. Inkluder algoritmehovedfilen for at bruge dens funktioner.
  2. Inkluder iostream-header-filen for at bruge dens funktioner.
  3. Inkluder listehovedfilen for at bruge dens funktioner.
  4. Inkluder std-navneområdet i vores program for at bruge dets klasser uden at kalde det.
  5. Kald funktionen main(). Programlogikken skal tilføjes i denne funktions brødtekst.
  6. Opret en liste med navnet min_liste med et sæt på 4 heltal.
  7. Udskriv noget tekst på konsollen.
  8. Brug en for-løkke til at oprette en løkkevariabel x. Denne variabel vil blive brugt til at iterere over listeelementerne.
  9. Udskriv værdierne af listen på konsollen.
  10. Enden af ​​kroppen af ​​for-løkken.
  11. Opret en iterator i, der peger på det første element på listen.
  12. Brug funktionen erase() peget af iteratoren i.
  13. Udskriv noget tekst på konsollen.
  14. Brug en for-løkke til at oprette en løkkevariabel x. Denne variabel vil blive brugt til at iterere over listeelementerne.
  15. Udskriv værdierne af listen på konsollen. Dette kommer efter sletning.
  16. Enden af ​​kroppen af ​​for-løkken.
  17. Programmet skal returnere en værdi efter vellykket afslutning.
  18. 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.