std::list in C++ esimerkin kanssa
โก รlykรคs yhteenveto
std::list in C++ on kaksinkertaisesti linkitettynรค listana toteutettu sekvenssisรคiliรถ, joka mahdollistaa nopean lisรคyksen ja poiston missรค tahansa kohdassa tallentaen elementtejรค epรคjatkuvaan muistiin ja tukien kaksisuuntaista perรคkkรคistรค kรคyttรถรค satunnaisen kรคytรถn sijaan.

Mikรค on std::list?
In C++, std::list viittaa tallennussรคiliรถรถn. std::list-luettelon avulla voit lisรคtรค ja poistaa kohteita mistรค tahansa. std::list on toteutettu kaksinkertaisesti linkitettynรค luettelona. Tรคmรค tarkoittaa, ettรค luettelotietoihin pรครคsee kรคsiksi kaksisuuntaisesti ja perรคkkรคin.
Vakiomallipohjakirjaston luettelo ei tue nopeaa satunnaista kรคyttรถรค, mutta se tukee perรคkkรคistรค kรคyttรถรค 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.
Nรคmรค piirteet herรคttรคvรคt kรคytรคnnรถn kysymyksen: milloin sinun oikeastaan โโpitรคisi tarttua listaan?
Miksi kรคyttรครค std::list?
Tรคssรค ovat syyt std::listin kรคyttรถรถn:
- std::list toimii paremmin verrattuna muihin sekvenssikontteihin, kuten array ja vector.
- Niillรค on parempi suorituskyky lisรคyksessรค, siirtรคmisessรค ja ulosviennissรคtracelementtien kรคsittelyรค mistรค tahansa asennosta.
- Std::list toimii paremmin myรถs algoritmeilla, jotka suorittavat tรคllaisia โโtoimintoja intensiivisesti.
Kun syyt ovat selvรคt, seuraava vaihe on syntaksi, joka deklaroi sellaisen.
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รครค elementin tyypin. Voit korvata T:n millรค tahansa tietotyypillรค, jopa kรคyttรคjรคn mรครคrittรคmรคllรค tyypillรค.
- Alloc โ Mรครคrittรครค allokaattoriobjektin tyypin. Tรคmรค kรคyttรครค oletusarvoisesti allokaattoriluokkamallia. Se on arvosta riippuvainen ja kรคyttรครค yksinkertaista muistin allokointimallia.
Esimerkki 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รถ:
Tรคssรค on kuvakaappaus koodista:
Code Selitys:
- Sisรคllytรค algoritmin otsikkotiedosto kรคyttรครคksesi sen toimintoja.
- Sisรคllytรค iostream-otsikkotiedosto kรคyttรครคksesi sen toimintoja.
- Sisรคllytรค luettelon otsikkotiedosto kรคyttรครคksesi sen toimintoja.
- Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisรคtรค tรคmรคn funktion runkoon.
- Luo lista nimeltรค oma_luettelo 4 kokonaislukujoukolla.
- Kรคyttรครค silmukalle luodaksesi silmukkamuuttujan x. Tรคtรค muuttujaa kรคytetรครคn listan alkioiden lรคpikรคymiseen.
- Tulosta luettelon arvot konsolissa.
- For-silmukan rungon loppu.
- 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รถ:
Tรคssรค on kuvakaappaus koodista:
Code Selitys:
- Sisรคllytรค iostream-otsikkotiedosto kรคyttรครคksesi sen toimintoja.
- Sisรคllytรค luettelon otsikkotiedosto kรคyttรครคksesi sen toimintoja.
- Sisรคllytรค std-nimiavaruus koodiin, jotta voit kรคyttรครค sen luokkia kutsumatta sitรค.
- Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisรคtรค tรคmรคn funktion runkoon.
- Luo tyhjรค lista nimeltรค l.
- Luo lista nimeltรค l1, jossa on 3 kokonaislukua.
- Luo lista nimeltรค l2, jossa on kaikki listan l1 elementit alusta loppuun.
- Luo l3-niminen lista kรคyttรคmรคllรค siirtosemantiikkaa. Listalla l3 on sama sisรคltรถ kuin listalla l2.
- Tulosta l-nimisen luettelon koko konsoliin muun tekstin rinnalle.
- Tulosta tekstiรค konsoliin.
- Luo iteraattori nimeltรค se ja kรคytรค sitรค iteroitaessa listan l2 elementtejรค.
- Tulosta l2-nimisen luettelon elementit konsoliin.
- Tulosta tekstiรค konsoliin.
- Luo iteraattori nimeltรค se ja kรคytรค sitรค iteroitaessa listan l3 elementtejรค.
- Tulosta l3-nimisen luettelon elementit konsoliin.
- Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
- 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
Listan arvojen lisรครคmiseen on olemassa erilaisia โโfunktioita. Havainnollistetaanpa tรคtรค:
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รถ:
Tรคssรค on kuvakaappaus koodista:
Code Selitys:
- Sisรคllytรค algoritmin otsikkotiedosto kรคyttรครคksesi sen toimintoja.
- Sisรคllytรค iostream-otsikkotiedosto kรคyttรครคksesi sen toimintoja.
- Sisรคllytรค luettelon otsikkotiedosto kรคyttรครคksesi sen toimintoja.
- Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisรคtรค tรคmรคn funktion runkoon.
- Luo lista nimeltรค oma_luettelo 4 kokonaislukujoukolla.
- Lisรครค elementti 11 listan "my_list" etupuolelle.
- Lisรครค elementti 18 listan loppuun, jonka nimi on my_list.
- Luo se iteraattori ja etsi sen avulla elementti 10 listasta my_list.
- Kรคytรค if-lausetta mรครคrittรครคksesi, lรถytyikรถ yllรค oleva elementti vai ei.
- Aseta elementti 21 ennen yllรค olevaa elementtiรค, jos se lรถytyi.
- if-lauseen rungon loppu.
- Kรคytรค for-silmukkaa luodaksesi silmukkamuuttujan x. Tรคtรค muuttujaa kรคytetรครคn iteroimaan luetteloelementtien yli.
- Tulosta luettelon arvot konsolissa.
- For-silmukan rungon loppu.
- Main()-funktion rungon loppu.
Listalle menevรคt elementit voidaan yhtรค helposti poistaa.
Poistaminen luettelosta
Listalta on mahdollista poistaa kohteita. Erase()-funktion avulla voit poistaa listalta kohteen tai useita kohteita.
- Jos haluat poistaa yhden kohteen, annat vain yhden kokonaisluvun sijainnin. Kohde poistetaan.
- Alueen poistamiseksi annat eteenpรคin aloitus- ja lopetus-iteraattorit. Havainnollistetaanpa tรคtรค.
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รถ:
Tรคssรค on kuvakaappaus koodista:
Code Selitys:
- Sisรคllytรค algoritmin otsikkotiedosto kรคyttรครคksesi sen toimintoja.
- Sisรคllytรค iostream-otsikkotiedosto kรคyttรครคksesi sen toimintoja.
- Sisรคllytรค luettelon otsikkotiedosto kรคyttรครคksesi sen toimintoja.
- Sisรคllytรค std-nimiavaruus ohjelmaamme, jotta voit kรคyttรครค sen luokkia kutsumatta sitรค.
- Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisรคtรค tรคmรคn funktion runkoon.
- Luo lista nimeltรค oma_luettelo 4 kokonaislukujoukolla.
- Tulosta tekstiรค konsoliin.
- Kรคytรค for-silmukkaa luodaksesi silmukkamuuttujan x. Tรคtรค muuttujaa kรคytetรครคn iteroimaan luetteloelementtien yli.
- Tulosta luettelon arvot konsolissa.
- For-silmukan rungon loppu.
- Luo iteraattori i, joka osoittaa luettelon ensimmรคiseen elementtiin.
- Kรคytรค iteraattorin i osoittamaa erase()-funktiota.
- Tulosta tekstiรค konsoliin.
- Kรคytรค for-silmukkaa luodaksesi silmukkamuuttujan x. Tรคtรค muuttujaa kรคytetรครคn iteroimaan luetteloelementtien yli.
- Tulosta luettelon arvot konsolissa. Tรคmรค tulee poiston jรคlkeen.
- For-silmukan rungon loppu.
- Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
- Main()-funktion rungon loppu.






