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:

std::liste

Her er et skjermbilde av koden:

std::liste

Kodeforklaring:

  1. Inkluder algoritmehodefilen for å bruke funksjonene.
  2. Inkluder iostream-headerfilen for å bruke funksjonene.
  3. Inkluder listeoverskriftsfilen for å bruke funksjonene.
  4. Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
  5. Lag en liste kalt min_liste med et sett med 4 heltall.
  6. Bruk en for-løkke for å lage en løkkevariabel x. Denne variabelen vil bli brukt til å iterere over listeelementene.
  7. Skriv ut verdiene til listen på konsollen.
  8. Slutten av kroppen til for sløyfe.
  9. 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:

liste konstruktører

Her er et skjermbilde av koden:

liste konstruktører

Kodeforklaring:

  1. Inkluder iostream-headerfilen for å bruke funksjonene.
  2. Inkluder listeoverskriftsfilen for å bruke funksjonene.
  3. Inkluder std-navneområdet i koden for å bruke klassene uten å kalle det.
  4. Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
  5. Lag en tom liste med navnet l.
  6. Lag en liste med navnet l1 med et sett med 3 heltall.
  7. Lag en liste med navnet l2 med alle elementene i listen kalt l1, fra begynnelsen til slutten.
  8. Lag en liste med navnet l3 ved å bruke bevegelsessemantikk. Listen l3 vil ha samme innhold som listen l2.
  9. Skriv ut størrelsen på listen kalt l på konsollen sammen med annen tekst.
  10. Skriv ut litt tekst på konsollen.
  11. Lag en iterator som heter den og bruk den til å iterere over elementene i listen som heter l2.
  12. Skriv ut elementene i listen som heter l2 på konsollen.
  13. Skriv ut litt tekst på konsollen.
  14. Lag en iterator som heter den og bruk den til å iterere over elementene i listen som heter l3.
  15. Skriv ut elementene i listen som heter l3 på konsollen.
  16. Programmet må returnere verdi ved vellykket gjennomføring.
  17. 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:

Setter inn i en liste

Her er et skjermbilde av koden:

Setter inn i en liste

Kodeforklaring:

  1. Inkluder algoritmehodefilen for å bruke funksjonene.
  2. Inkluder iostream-headerfilen for å bruke funksjonene.
  3. Inkluder listeoverskriftsfilen for å bruke funksjonene.
  4. Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
  5. Lag en liste kalt min_liste med et sett med 4 heltall.
  6. Sett inn element 11 foran på listen som heter min_liste.
  7. Sett inn element 18 til slutten av listen som heter min_liste.
  8. Lag en iterator den og bruk den til å finne element 10 fra listen my_list.
  9. Bruk en if-setning for å finne ut om elementet ovenfor ble funnet eller ikke.
  10. Sett inn element 21 før elementet ovenfor hvis det ble funnet.
  11. Slutten av brødteksten til if-setningen.
  12. Bruk en for-løkke for å lage en løkkevariabel x. Denne variabelen vil bli brukt til å iterere over listeelementene.
  13. Skriv ut verdiene til listen på konsollen.
  14. Enden av kroppen av for en løkke.
  15. 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:

Sletting fra en liste

Her er skjermbilde av koden:

Sletting fra en liste

Kodeforklaring:

  1. Inkluder algoritmehodefilen for å bruke funksjonene.
  2. Inkluder iostream-headerfilen for å bruke funksjonene.
  3. Inkluder listeoverskriftsfilen for å bruke funksjonene.
  4. Inkluder std-navneområdet i programmet vårt for å bruke klassene uten å kalle det.
  5. Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
  6. Lag en liste kalt min_liste med et sett med 4 heltall.
  7. Skriv ut litt tekst på konsollen.
  8. Bruk en for-løkke for å lage en løkkevariabel x. Denne variabelen vil bli brukt til å iterere over listeelementene.
  9. Skriv ut verdiene til listen på konsollen.
  10. Enden av kroppen til for-løkken.
  11. Lag en iterator i som peker til det første elementet i listen.
  12. Bruk erase()-funksjonen pekt av iteratoren i.
  13. Skriv ut litt tekst på konsollen.
  14. Bruk en for-løkke for å lage en løkkevariabel x. Denne variabelen vil bli brukt til å iterere over listeelementene.
  15. Skriv ut verdiene til listen på konsollen. Dette kommer etter sletting.
  16. Enden av kroppen til for-løkken.
  17. Programmet må returnere en verdi ved vellykket gjennomføring.
  18. 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.