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.

Oppsummer dette innlegget med: