Std :: list v jeziku C ++ s primerom

Kazalo:

Anonim

Kaj je std :: list?

V jeziku C ++ se std :: list nanaša na vsebnik za shranjevanje. Seznam std: omogoča vstavljanje in odstranjevanje elementov od koder koli. Seznam std :: je izveden kot dvojno povezan seznam. To pomeni, da je do podatkov do seznama mogoče dostopati dvosmerno in zaporedno.

Seznam knjižnice standardnih predlog ne podpira hitrega naključnega dostopa, podpira pa zaporedni dostop iz vseh smeri.

Elemente seznama lahko razpršite v različne koščke pomnilnika. Informacije, potrebne za zaporedni dostop do podatkov, so shranjene v vsebniku. Seznam std :: se lahko med izvajanjem po potrebi razširi in skrči z obeh koncev. Notranji razdeljevalec samodejno izpolnjuje zahteve glede shranjevanja.

V tej vadnici C ++ boste izvedeli:

  • Kaj je std :: list?
  • Zakaj uporabljati std :: list?
  • Sintaksa seznama
  • Funkcije seznama C ++
  • Konstruktorji
  • Lastnosti vsebnika
  • Vstavljanje na seznam
  • Brisanje s seznama

Zakaj uporabljati std :: list?

Tukaj so razlogi za uporabo std :: List:

  • Seznam std :: se bolje primerja z drugimi vsebniki zaporedja, kot sta matrika in vektor.
  • Imajo boljše rezultate pri vstavljanju, premikanju in pridobivanju elementov iz katerega koli položaja.
  • Seznam std :: se bolje obnese tudi z algoritmi, ki intenzivno izvajajo takšne operacije.

Sintaksa seznama

Če želimo definirati seznam std ::, moramo uvoziti datoteko glave . Tu je sintaksa definicije std :: list:

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

Tu je opis zgornjih parametrov:

  • T - Določa vrsto vsebovanega elementa.

    T lahko nadomestite s katerim koli podatkovnim tipom, tudi z uporabniško določenimi.

  • Alloc - definira vrsto predmeta razdeljevalca.

    Ta privzeto uporablja predlogo razreda razdeljevalca. Je odvisen od vrednosti in uporablja preprost model dodeljevanja pomnilnika.

Primeri 1:

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

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. Vključite datoteko glave algoritma za uporabo njenih funkcij.
  2. Vključite datoteko glave iostream za uporabo njenih funkcij.
  3. Vključite datoteko glave seznama, da boste lahko uporabljali njene funkcije.
  4. Pokličite glavno funkcijo. V telo te funkcije je treba dodati programsko logiko.
  5. Ustvarite seznam z imenom my_list z naborom 4 celih števil.
  6. Z zanko for ustvarite spremenljivko zanke x. Ta spremenljivka bo uporabljena za ponovitev elementov seznama.
  7. Na konzoli natisnite vrednosti seznama.
  8. Konec telesa zanke for.
  9. Konec telesa glavne () funkcije.

Funkcije seznama C ++

Tu so običajne funkcije std :: list:

Funkcija Opis
vstavi() Ta funkcija vstavi nov element pred položajem, na katerega usmerja iterator.
porini nazaj() Te funkcije na koncu seznama dodajo nov element.
push_front () Doda nov element na sprednji strani seznama.
pop_front () Izbriše prvi element seznama.
velikost () Ta funkcija določa število elementov seznama.
spredaj () Za določitev prvih elementov seznama.
nazaj () Za določitev zadnjega elementa seznama.
vzvratno () Obrne elemente seznama.
spajanje () Združi dva razvrščena seznama.

Konstruktorji

Tu je seznam funkcij, ki jih zagotavlja datoteka glave :

  • Privzeti konstruktor std :: list :: list () - Ustvari prazen seznam, to z nič elementi.
  • Izpolnite konstruktor std :: list :: list () - ustvari seznam z n elementi in vsakemu elementu dodeli vrednost nič (0).
  • Konstruktor obsega std :: list :: list () - ustvari seznam z veliko elementi v obsegu od prvega do zadnjega.
  • Kopiraj konstruktor std :: list :: list () - Ustvari seznam s kopijo vsakega elementa na obstoječem seznamu.
  • Premakni konstruktor std :: list :: list () - ustvari seznam z elementi drugega seznama z uporabo semantike premakni.
  • Konstruktor seznama inicializatorjev std :: list :: list () - ustvari seznam z elementi drugega seznama z uporabo semantike premakni.

2. primer:

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

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. Vključite datoteko glave iostream za uporabo njenih funkcij.
  2. Vključite datoteko glave seznama, da boste lahko uporabljali njene funkcije.
  3. V kodo vključite imenski prostor std, da lahko uporabite njegove razrede, ne da bi ga poklicali.
  4. Pokličite glavno funkcijo. V telo te funkcije je treba dodati programsko logiko.
  5. Ustvarite prazen seznam z imenom l.
  6. Ustvarite seznam z imenom l1 z naborom 3 celih števil.
  7. Ustvarite seznam z imenom l2 z vsemi elementi na seznamu z imenom l1, od začetka do konca.
  8. Ustvarite seznam z imenom l3 z uporabo semantike premikanja. Seznam l3 bo imel enako vsebino kot seznam l2.
  9. Na konzolo poleg drugega besedila natisnite velikost seznama z imenom l.
  10. Na konzolo natisnite nekaj besedila.
  11. Ustvarite iterator z imenom in ga uporabite za ponovitev elementov seznama z imenom l2.
  12. Natisnite elemente seznama z imenom l2 na konzolo.
  13. Na konzolo natisnite nekaj besedila.
  14. Ustvarite iterator z imenom in ga uporabite za ponovitev elementov seznama z imenom l3.
  15. Natisnite elemente seznama z imenom l3 na konzolo.
  16. Program mora po uspešnem zaključku vrniti vrednost.
  17. Konec telesa glavne () funkcije.

Lastnosti vsebnika

Tu je seznam lastnosti vsebnika:

Nepremičnina Opis
Zaporedje Zabojniki za zaporedje razvrščajo svoje elemente v strogem linearnem zaporedju. Do elementov dostopa njihov položaj v zaporedju.
Dvojno povezan seznam Vsak element ima informacije o tem, kako najti prejšnje in naslednje elemente. To omogoča nenehen čas za operacije vstavljanja in brisanja.
Razdeljevalec seznanjen Razdelilnik se uporablja za dinamično spreminjanje velikosti pomnilnika.

Vstavljanje na seznam

Obstajajo različne funkcije, s katerimi lahko vstavimo vrednosti na seznam. Pokažimo to:

3. primer:

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

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. Vključite datoteko glave algoritma za uporabo njenih funkcij.
  2. Vključite datoteko glave iostream za uporabo njenih funkcij.
  3. Vključite datoteko glave seznama, da boste lahko uporabljali njene funkcije.
  4. Pokličite glavno funkcijo. V telo te funkcije je treba dodati programsko logiko.
  5. Ustvarite seznam z imenom my_list z naborom 4 celih števil.
  6. Vstavite element 11 na sprednji del seznama z imenom my_list.
  7. Vstavite element 18 na konec seznama z imenom my_list.
  8. Ustvarite iterator in z njim poiščite element 10 s seznama my_list.
  9. Z izjavo if ugotovite, ali je bil zgornji element najden ali ne.
  10. Če je bil najden, vstavite element 21 pred zgornjim elementom.
  11. Konec telesa stavka if.
  12. Z zanko for ustvarite spremenljivko zanke x. Ta spremenljivka bo uporabljena za ponovitev elementov seznama.
  13. Na konzoli natisnite vrednosti seznama.
  14. Konec telesa zanke for.
  15. Konec telesa glavne () funkcije.

Brisanje s seznama

Elemente je mogoče izbrisati s seznama. Funkcija brisanja () vam omogoča, da s seznama izbrišete element ali vrsto elementov.

  • Če želite izbrisati posamezen element, preprosto prenesete eno celoštevilčno mesto. Element bo izbrisan.
  • Če želite izbrisati obseg, podajte začetni in končni iterator. Pokažimo to.

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

Izhod:

Tu je posnetek zaslona kode:

Razlaga kode:

  1. Vključite datoteko glave algoritma za uporabo njenih funkcij.
  2. Vključite datoteko glave iostream za uporabo njenih funkcij.
  3. Vključite datoteko glave seznama, da boste lahko uporabljali njene funkcije.
  4. V naš program vključite imenski prostor std, da lahko uporablja njegove razrede, ne da bi ga poklical.
  5. Pokličite glavno funkcijo. V telo te funkcije je treba dodati programsko logiko.
  6. Ustvarite seznam z imenom my_list z naborom 4 celih števil.
  7. Na konzolo natisnite nekaj besedila.
  8. Z zanko for ustvarite spremenljivko zanke x. Ta spremenljivka bo uporabljena za ponovitev elementov seznama.
  9. Na konzoli natisnite vrednosti seznama.
  10. Konec telesa zanke for.
  11. Ustvarite iterator i, ki kaže na prvi element seznama.
  12. Uporabite funkcijo erase (), ki jo kaže iterator i.
  13. Na konzolo natisnite nekaj besedila.
  14. Z zanko for ustvarite spremenljivko zanke x. Ta spremenljivka bo uporabljena za ponovitev elementov seznama.
  15. Na konzoli natisnite vrednosti seznama. To pride po izbrisu.
  16. Konec telesa zanke for.
  17. Program mora po uspešnem zaključku vrniti vrednost.
  18. Konec telesa glavne () funkcije.

Povzetek:

  • Std :: list je vsebnik za shranjevanje.
  • Omogoča vstavljanje in brisanje predmetov od koder koli v nenehnem času.
  • Izvaja se kot dvojna povezava
  • Do podatkov std :: list je mogoče dostopati dvosmerno in zaporedno.
  • std :: list ne podpira hitrega naključnega dostopa. Podpira pa zaporedni dostop iz vseh smeri.
  • Elemente seznama std :: list lahko razpršite v različne koščke pomnilnika.
  • Po potrebi lahko med izvajanjem skrčite ali razširite std :: list z obeh koncev.
  • Za vstavljanje elementov v std :: list uporabimo funkcijo insert ().
  • Če želite elemente izbrisati s seznama std ::, uporabimo funkcijo erase ().