Std :: luettelo C ++: ssa esimerkin kanssa

Sisällysluettelo:

Anonim

Mikä on vakio :: luettelo?

C ++: ssa std :: list viittaa varastosäiliöön. Std: -luettelon avulla voit lisätä ja poistaa kohteita mistä tahansa. Std :: list toteutetaan kaksoislinkitettynä luettelona. Tämä tarkoittaa, että luettelotietoihin pääsee kaksisuuntaisesti ja peräkkäin.

Vakiomallikirjastoluettelo ei tue nopeaa satunnaista käyttöä, mutta se tukee peräkkäistä pääsyä kaikista suunnista.

Voit sirotella luetteloelementtejä eri muistipaloiksi. Tietojen peräkkäiseen käyttöön tarvittavat tiedot tallennetaan säilöön. Std :: -luettelo voi laajentua ja kutistua molemmista päistä tarpeen mukaan ajon aikana. Sisäinen varaaja täyttää automaattisesti tallennusvaatimukset.

Tässä C ++ -opetusohjelmassa opit:

  • Mikä on vakio :: luettelo?
  • Miksi käyttää standardia :: list?
  • Luettelon syntaksi
  • C ++ - luettelotoiminnot
  • Rakentajat
  • Säiliön ominaisuudet
  • Lisätään luetteloon
  • Poistaminen luettelosta

Miksi käyttää standardia :: list?

Tässä on syytä käyttää standardia :: List:

  • Std :: -luettelo vertaa paremmin muihin sekvenssisäiliöihin, kuten taulukko ja vektori.
  • Niillä on parempi suorituskyky elementtien asettamisessa, siirtämisessä ja purkamisessa mistä tahansa asennosta.
  • Std :: -lista toimii paremmin myös algoritmeilla, jotka suorittavat tällaisia ​​operaatioita intensiivisesti.

Luettelon syntaksi

Std :: list -määrityksen määrittämiseksi meidän on tuotava -otsikkotiedosto. Tässä on vakio :: luettelomääritelmän syntakse:

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

Tässä on kuvaus yllä olevista parametreista:

  • T - Määrittää sisältyvän elementin tyypin.

    Voit korvata T: n millä tahansa tietotyypillä, jopa käyttäjän määrittelemillä.

  • Alloc - Määrittää allokaattoriobjektin tyypin.

    Tämä käyttää oletusarvoisesti allokaattoriluokan mallia. Se on arvosta riippuvainen ja käyttää yksinkertaista muistinjakomallia.

Esimerkit 1:

#include #include #include 
int main() {std::list my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}

Tuotos:

Tässä on kuvakaappaus koodista:

Koodin selitys:

  1. Sisällytä algoritmin otsikkotiedosto käyttämään sen toimintoja.
  2. Sisällytä iostream-otsikkotiedosto käyttämään sen toimintoja.
  3. Lisää luettelon otsikkotiedosto käyttämään sen toimintoja.
  4. Kutsu main () -toiminto. Ohjelmalogiikka tulisi lisätä tämän toiminnon runkoon.
  5. Luo luettelo nimeltä my_list, jossa on 4 kokonaislukua.
  6. Luo silmukkamuuttuja x for for -silmukalla. Tätä muuttujaa käytetään toistamaan luetteloelementit.
  7. Tulosta luettelon arvot konsolista.
  8. Silmukan rungon pää.
  9. Pääfunktion () rungon pää.

C ++ - luettelotoiminnot

Tässä ovat tavalliset standardi :: luettelo -toiminnot:

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

Rakentajat

Tässä on luettelo -otsikkotiedoston tarjoamista toiminnoista:

  • Oletusrakentaja std :: list :: list () - Se luo tyhjän luettelon, jossa ei ole elementtejä.
  • Täytä konstruktori std :: list :: list () - Se luo luettelon, jossa on n elementtiä, ja määrittää kullekin elementille arvon nolla (0).
  • Range constructor std :: list :: list () - luo luettelon, jossa on monia elementtejä ensimmäisestä viimeiseen.
  • Kopioi rakentaja std :: list :: list () - Se luo luettelon, jossa on kopio jokaisesta olemassa olevan luettelon elementistä.
  • Siirrä konstruktori std :: list :: list () - luo luettelon toisen luettelon elementeistä siirtosemantiikan avulla.
  • Alustusluettelon rakentaja std :: list :: list () - Se luo luettelon toisen luettelon elementeistä siirtosemantiikan avulla.

Esimerkki 2:

#include #include 
using namespace std;int main(void) {list l;list l1 = { 10, 20, 30 };list l2(l1.begin(), l1.end());list 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;}

Tuotos:

Tässä on kuvakaappaus koodista:

Koodin selitys:

  1. Sisällytä iostream-otsikkotiedosto käyttämään sen toimintoja.
  2. Lisää luettelon otsikkotiedosto käyttämään sen toimintoja.
  3. Lisää standardin nimitila koodiin, jotta voit käyttää sen luokkia kutsumatta sitä.
  4. Kutsu main () -toiminto. Ohjelmalogiikka tulisi lisätä tämän toiminnon runkoon.
  5. Luo tyhjä luettelo nimeltä l.
  6. Luo luettelo l1, jossa on 3 kokonaislukua.
  7. Luo luettelo l2, jonka kaikki elementit ovat luettelossa l1, alusta loppuun.
  8. Luo luettelo l3 käyttämällä siirtosemantiikkaa. Luettelolla l3 on sama sisältö kuin luettelolla l2.
  9. Tulosta konsolille l-nimisen luettelon koko muun tekstin ohella.
  10. Tulosta tekstiä konsolille.
  11. Luo iteraattori, jolle on annettu nimi, ja iteroi sen avulla luettelon l2 elementit.
  12. Tulosta luettelon l2 elementit konsolille.
  13. Tulosta tekstiä konsolille.
  14. Luo iteraattori, jolle on annettu nimi, ja iteroi sen avulla luettelon l3 elementit.
  15. Tulosta konsolille luettelon l3 elementit.
  16. Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
  17. Pääfunktion () rungon pää.

Säiliön ominaisuudet

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

Omaisuus Kuvaus
Järjestys Sekvenssisäiliöt järjestävät elementit tiukassa lineaarisessa järjestyksessä. Elementteihin pääsee niiden sijainnin mukaan järjestyksessä.
Kaksinkertaisesti linkitetty luettelo Jokaisella elementillä on tietoa edellisten ja seuraavien elementtien löytämisestä. Tämä sallii vakioajan lisäys- ja poistotoiminnoille.
Jakaja tietoinen Varaajaobjektia käytetään muokkaamaan tallennuskokoa dynaamisesti.

Lisätään luetteloon

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

Esimerkki 3:

#include #include #include 
int main() {std::list 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';}}

Tuotos:

Tässä on kuvakaappaus koodista:

Koodin selitys:

  1. Sisällytä algoritmin otsikkotiedosto käyttämään sen toimintoja.
  2. Sisällytä iostream-otsikkotiedosto käyttämään sen toimintoja.
  3. Lisää luettelon otsikkotiedosto käyttämään sen toimintoja.
  4. Kutsu main () -toiminto. Ohjelmalogiikka tulisi lisätä tämän toiminnon runkoon.
  5. Luo luettelo nimeltä my_list, jossa on 4 kokonaislukua.
  6. Lisää elementti 11 my_list-nimisen luettelon eteen.
  7. Lisää elementti 18 my_list-nimisen luettelon loppuun.
  8. Luo iteraattori ja etsi se sen avulla elementti 10 luettelosta my_list.
  9. Käytä if-käskyä selvittääksesi, onko yllä oleva elementti löydetty vai ei.
  10. Lisää elementti 21 ennen yllä olevaa elementtiä, jos se löydettiin.
  11. If-lauseen rungon loppu.
  12. Luo silmukkamuuttuja x for for -silmukalla. Tätä muuttujaa käytetään toistamaan luetteloelementit.
  13. Tulosta luettelon arvot konsolista.
  14. Silmukan rungon pää.
  15. Pääfunktion () rungon pää.

Poistaminen luettelosta

Kohteita on mahdollista poistaa luettelosta. Erase () -toiminnon avulla voit poistaa kohteen tai kohteiden alueen luettelosta.

  • Voit poistaa yhden kohteen yksinkertaisesti siirtämällä yhden kokonaisluvun paikan. Kohde poistetaan.
  • Alueen poistamiseksi ohitat alku- ja loppu-iteraattorit. Osoitetaan tämä.

Esimerkki 4:

#include #include #include 
using namespace std;int main() {std::list my_list = { 12, 5, 10, 9 };cout << "List elements before deletion: ";for (int x : my_list) {std::cout << x << '\n';}list::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;}

Tuotos:

Tässä on kuvakaappaus koodista:

Koodin selitys:

  1. Sisällytä algoritmin otsikkotiedosto käyttämään sen toimintoja.
  2. Sisällytä iostream-otsikkotiedosto käyttämään sen toimintoja.
  3. Lisää luettelon otsikkotiedosto käyttämään sen toimintoja.
  4. Sisällytä vakio nimitila ohjelmaamme käyttääksesi luokkia sitä kutsumatta.
  5. Kutsu main () -toiminto. Ohjelmalogiikka tulisi lisätä tämän toiminnon runkoon.
  6. Luo luettelo nimeltä my_list, jossa on 4 kokonaislukua.
  7. Tulosta tekstiä konsolille.
  8. Luo silmukkamuuttuja x for for -silmukalla. Tätä muuttujaa käytetään toistamaan luetteloelementit.
  9. Tulosta luettelon arvot konsolista.
  10. For-silmukan rungon pää.
  11. Luo iteraattori i, joka osoittaa luettelon ensimmäiseen elementtiin.
  12. Käytä iteraattorin i osoittamaa erase () -toimintoa.
  13. Tulosta tekstiä konsolille.
  14. Luo silmukkamuuttuja x for for -silmukalla. Tätä muuttujaa käytetään toistamaan luetteloelementit.
  15. Tulosta luettelon arvot konsolista. Tämä tapahtuu poistamisen jälkeen.
  16. For-silmukan rungon pää.
  17. Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
  18. Pääfunktion () rungon pää.

Yhteenveto:

  • Std :: list on varastosäiliö.
  • Se mahdollistaa kohteiden lisäämisen ja poistamisen mistä tahansa vakiona.
  • Se toteutetaan kaksoislinkkinä
  • Std :: listatietoihin pääsee kaksisuuntaisesti ja peräkkäin.
  • std :: list ei tue nopeaa satunnaista käyttöä. Se tukee kuitenkin peräkkäistä pääsyä kaikista suunnista.
  • Voit sirotella std :: list-listan elementtejä eri muistipaloiksi.
  • Voit kutistaa tai laajentaa std :: listia molemmista päistä tarpeen mukaan ajon aikana.
  • Jos haluat lisätä kohteita std :: listiin, käytämme insert () -toimintoa.
  • Kohteiden poistamiseksi std :: -luettelosta käytämme erase () -toimintoa.