std::list in C++ esimerkin kanssa

Mikä on std::list?

In C++, std::lista viittaa varastosäiliöön. std:list mahdollistaa kohteiden lisäämisen ja poistamisen mistä tahansa. Std::list on toteutettu kaksoislinkitettynä luettelona. Tämä tarkoittaa, että luettelotietoja voidaan käyttää kaksisuuntaisesti ja peräkkäin.

Standard Template Library -luettelo ei tue nopeaa satunnaiskäyttöä, mutta se tukee peräkkäistä pääsyä kaikista suunnista.

Voit sirottaa luetteloelementtejä eri muistipaloihin. Tietojen peräkkäiseen käyttöön tarvittavat tiedot tallennetaan säilöön. Std::lista voi laajeta ja pienentyä molemmista päistä tarpeen mukaan ajon aikana. Sisäinen allokaattori täyttää automaattisesti tallennusvaatimukset.

Miksi käyttää std::list?

Tässä on syyt std::List:n käyttöön:

  • Std::lista on parempi verrattuna muihin sekvenssisäiliöihin, kuten matriisi ja vektori.
  • Niillä on parempi suorituskyky elementtien asettamisessa, siirtämisessä ja poistamisessa mistä tahansa asennosta.
  • Std::list toimii paremmin myös algoritmeilla, jotka suorittavat tällaisia ​​toimintoja intensiivisesti.

Listaa syntaksi

Jotta voimme määrittää std::list, meidän on tuotava otsikkotiedosto. Tässä on std::list-määrityksen syntaksi:

template < class Type, class Alloc =allocator<T> > class list;

Tässä on kuvaus yllä olevista parametreista:

  • T – Määrittää sisällytettävän elementin tyypin. Voit korvata T:n millä tahansa tietotyypillä, myös käyttäjän määrittämillä tyypeillä.
  • Alloc – Määrittää allokaattoriobjektin tyypin. Tämä käyttää oletusarvoisesti allokaattoriluokan mallia. Se on arvosta riippuvainen ja käyttää yksinkertaista muistin varausmallia.

Esimerkit 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';
	}
}

lähtö:

std::list

Tässä on kuvakaappaus koodista:

std::list

Koodin selitys:

  1. Sisällytä algoritmin otsikkotiedosto käyttääksesi sen toimintoja.
  2. Sisällytä iostream-otsikkotiedosto käyttääksesi sen toimintoja.
  3. Sisällytä luettelon otsikkotiedosto käyttääksesi sen toimintoja.
  4. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tämän funktion runkoon.
  5. Luo lista nimeltä oma_luettelo 4 kokonaislukujoukolla.
  6. Käytä for-silmukkaa luodaksesi silmukkamuuttujan x. Tätä muuttujaa käytetään iteroimaan luetteloelementtien yli.
  7. Tulosta luettelon arvot konsolissa.
  8. Rungon loppu silmukalle.
  9. Main()-funktion rungon loppu.

C++ Listaa toiminnot

Tässä ovat yleiset std::list-toiminnot:

Toiminto Tuotetiedot
lisää () Tämä toiminto lisää uuden kohteen ennen iteraattorin osoittamaa paikkaa.
työnnä takaisin() Tämä toiminto lisää uuden kohteen luettelon loppuun.
push_front() Se lisää uuden kohteen luettelon eteen.
pop_front() Se poistaa luettelon ensimmäisen kohteen.
koko() Tämä toiminto määrittää luettelon elementtien lukumäärän.
edessä () Määrittää luettelon ensimmäiset kohteet.
takaisin() Määrittää luettelon viimeisen kohteen.
käänteinen() Se kääntää luettelon kohteet päinvastaiseksi.
yhdistää() Se yhdistää kaksi lajiteltua luetteloa.

Rakentajat

Tässä on luettelo tehtävät tarjoaa otsikkotiedosto:

  • Oletuskonstruktori std::list::list()- Se luo tyhjän listan, jossa on nolla elementtiä.
  • Fill constructor std::list::list()- Se luo luettelon, jossa on n elementtiä ja antaa kullekin elementille arvon nolla (0).
  • Aluekonstruktori std::list::list()- luo luettelon, jossa on useita elementtejä välillä ensimmäisestä viimeiseen.
  • Kopioi rakentaja std::list::list()- Se luo luettelon, jossa on kopio jokaisesta olemassa olevan luettelon sisältämästä elementistä.
  • Move constructor std::list::list()- luo listan toisen listan elementeistä käyttämällä siirtosemantiikkaa.
  • Initializer list constructor std::list::list()-Se luo listan toisen listan elementeistä käyttämällä siirtosemantiikkaa.

Esimerkki 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;
}

lähtö:

luettelo rakentajista

Tässä on kuvakaappaus koodista:

luettelo rakentajista

Koodin selitys:

  1. Sisällytä iostream-otsikkotiedosto käyttääksesi sen toimintoja.
  2. Sisällytä luettelon otsikkotiedosto käyttääksesi sen toimintoja.
  3. Sisällytä std-nimiavaruus koodiin, jotta voit käyttää sen luokkia kutsumatta sitä.
  4. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tämän funktion runkoon.
  5. Luo tyhjä lista nimeltä l.
  6. Luo lista nimeltä l1, jossa on 3 kokonaislukua.
  7. Luo lista nimeltä l2, jossa on kaikki listan l1 elementit alusta loppuun.
  8. Luo l3-niminen lista käyttämällä siirtosemantiikkaa. Listalla l3 on sama sisältö kuin listalla l2.
  9. Tulosta l-nimisen luettelon koko konsoliin muun tekstin rinnalle.
  10. Tulosta tekstiä konsoliin.
  11. Luo iteraattori nimeltä se ja käytä sitä iteroitaessa listan l2 elementtejä.
  12. Tulosta l2-nimisen luettelon elementit konsoliin.
  13. Tulosta tekstiä konsoliin.
  14. Luo iteraattori nimeltä se ja käytä sitä iteroitaessa listan l3 elementtejä.
  15. Tulosta l3-nimisen luettelon elementit konsoliin.
  16. Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
  17. Main()-funktion rungon loppu.

Säilytysominaisuudet

Tässä on luettelo säilön ominaisuuksista:

Omaisuus Tuotetiedot
Järjestys Sekvenssisäiliöt järjestävät elementit tiukassa lineaarisessa järjestyksessä. Elementteihin päästään niiden sijainnin perusteella sekvenssissä.
Kaksoislinkitetty lista Jokaisella elementillä on tietoa edellisten ja seuraavien elementtien paikantamisesta. Tämä mahdollistaa jatkuvan ajan lisäys- ja poistotoimenpiteille.
Alokaattoritietoinen Varaajan objektia käytetään tallennuskoon dynaamiseen muokkaamiseen.

Lisääminen luetteloon

On olemassa erilaisia ​​toimintoja, joiden avulla voimme lisätä arvoja luetteloon. Osoitetaan tämä:

Esimerkki 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';
	}
}

lähtö:

Lisääminen luetteloon

Tässä on kuvakaappaus koodista:

Lisääminen luetteloon

Koodin selitys:

  1. Sisällytä algoritmin otsikkotiedosto käyttääksesi sen toimintoja.
  2. Sisällytä iostream-otsikkotiedosto käyttääksesi sen toimintoja.
  3. Sisällytä luettelon otsikkotiedosto käyttääksesi sen toimintoja.
  4. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tämän funktion runkoon.
  5. Luo lista nimeltä oma_luettelo 4 kokonaislukujoukolla.
  6. Lisää elementti 11 listan "my_list" etupuolelle.
  7. Lisää elementti 18 listan loppuun, jonka nimi on my_list.
  8. Luo se iteraattori ja etsi sen avulla elementti 10 listasta my_list.
  9. Käytä if-lausetta määrittääksesi, löytyikö yllä oleva elementti vai ei.
  10. Aseta elementti 21 ennen yllä olevaa elementtiä, jos se löytyi.
  11. if-lauseen rungon loppu.
  12. Käytä for-silmukkaa luodaksesi silmukkamuuttujan x. Tätä muuttujaa käytetään iteroimaan luetteloelementtien yli.
  13. Tulosta luettelon arvot konsolissa.
  14. For-silmukan rungon loppu.
  15. Main()-funktion rungon loppu.

Poistaminen luettelosta

On mahdollista poistaa kohteita luettelosta. Erase()-toiminnolla voit poistaa kohteen tai joukon kohteita luettelosta.

  • Jos haluat poistaa yhden kohteen, annat vain yhden kokonaisluvun sijainnin. Kohde poistetaan.
  • Jos haluat poistaa alueen, ohitat aloitus- ja loppuiteraattorit. Osoitetaan tämä.

Esimerkki 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;
}

lähtö:

Poistaminen luettelosta

Tässä kuvakaappaus koodista:

Poistaminen luettelosta

Koodin selitys:

  1. Sisällytä algoritmin otsikkotiedosto käyttääksesi sen toimintoja.
  2. Sisällytä iostream-otsikkotiedosto käyttääksesi sen toimintoja.
  3. Sisällytä luettelon otsikkotiedosto käyttääksesi sen toimintoja.
  4. Sisällytä std-nimiavaruus ohjelmaamme, jotta voit käyttää sen luokkia kutsumatta sitä.
  5. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tämän funktion runkoon.
  6. Luo lista nimeltä oma_luettelo 4 kokonaislukujoukolla.
  7. Tulosta tekstiä konsoliin.
  8. Käytä for-silmukkaa luodaksesi silmukkamuuttujan x. Tätä muuttujaa käytetään iteroimaan luetteloelementtien yli.
  9. Tulosta luettelon arvot konsolissa.
  10. For-silmukan rungon loppu.
  11. Luo iteraattori i, joka osoittaa luettelon ensimmäiseen elementtiin.
  12. Käytä iteraattorin i osoittamaa erase()-funktiota.
  13. Tulosta tekstiä konsoliin.
  14. Käytä for-silmukkaa luodaksesi silmukkamuuttujan x. Tätä muuttujaa käytetään iteroimaan luetteloelementtien yli.
  15. Tulosta luettelon arvot konsolissa. Tämä tulee poiston jälkeen.
  16. For-silmukan rungon loppu.
  17. Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
  18. Main()-funktion rungon loppu.

Yhteenveto

  • Std::list on tallennussäiliö.
  • Se mahdollistaa kohteiden lisäämisen ja poistamisen mistä tahansa jatkuvasti.
  • Se toteutetaan kaksoislinkkinä
  • Std::list-tietoja voidaan käyttää kaksisuuntaisesti ja peräkkäin.
  • std::list ei tue nopeaa satunnaiskäyttöä. Se tukee kuitenkin peräkkäistä pääsyä kaikista suunnista.
  • Voit sirottaa std::list:n listaelementtejä eri muistipaloihin.
  • Voit pienentää tai laajentaa std::list -luetteloa molemmista päistä tarpeen mukaan ajon aikana.
  • Jos haluat lisätä kohteita std::listiin, käytämme insert()-funktiota.
  • Jos haluat poistaa kohteita std::listista, käytämme erase()-funktiota.