Std :: list u C ++ s primjerom

Sadržaj:

Anonim

Što je std :: list?

U jeziku C ++, std :: list odnosi se na spremnik za pohranu. Popis std: omogućuje vam umetanje i uklanjanje predmeta s bilo kojeg mjesta. Popis std :: implementiran je kao dvostruko povezan popis. To znači da se podacima s popisa može pristupiti dvosmjerno i uzastopno.

Popis biblioteke standardnih predložaka ne podržava brzi nasumični pristup, ali podržava sekvencijalni pristup iz svih pravaca.

Elemente popisa možete raspršiti u različite dijelove memorije. Podaci potrebni za uzastopni pristup podacima pohranjuju se u spremnik. Popis std :: može se proširiti i smanjiti s oba kraja po potrebi tijekom izvođenja. Interni raspodjeljivač automatski ispunjava zahtjeve za pohranom.

U ovom C ++ tutorialu naučit ćete:

  • Što je std :: list?
  • Zašto koristiti std :: list?
  • Sintaksa popisa
  • Funkcije popisa C ++
  • Konstruktori
  • Svojstva spremnika
  • Umetanje u popis
  • Brisanje s popisa

Zašto koristiti std :: list?

Evo razloga za upotrebu std :: Popisa:

  • Popis std :: bolje se uspoređuje s drugim spremnicima sekvence poput niza i vektora.
  • Imaju bolje performanse u umetanju, premještanju i vađenju elemenata iz bilo kojeg položaja.
  • Popis std :: također se bolje snalazi s algoritmima koji intenzivno izvode takve operacije.

Sintaksa popisa

Da bismo definirali std :: popis, moramo uvesti datoteku zaglavlja . Ovdje je sintaksa definicije std :: list:

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

Evo opisa gornjih parametara:

  • T - definira vrstu sadržanog elementa.

    T možete zamijeniti bilo kojom vrstom podataka, čak i korisnički definiranim vrstama.

  • Alloc - definira vrstu objekta za raspodjelu.

    To prema zadanim postavkama koristi predložak klase alokatora. Ovisi o vrijednosti i koristi jednostavan model raspodjele memorije.

Primjeri 1:

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

Izlaz:

Evo snimke zaslona koda:

Objašnjenje koda:

  1. Uključite datoteku zaglavlja algoritma da biste koristili njegove funkcije.
  2. Uključite iostream datoteku zaglavlja da biste koristili njegove funkcije.
  3. Uključite datoteku zaglavlja popisa da biste koristili njegove funkcije.
  4. Pozovite glavnu () funkciju. Logiku programa treba dodati unutar tijela ove funkcije.
  5. Stvorite popis pod nazivom my_list sa skupom od 4 cijele brojeve.
  6. Pomoću petlje for stvorite varijablu petlje x. Ova će se varijabla koristiti za prevrtanje elemenata popisa.
  7. Ispišite vrijednosti popisa na konzoli.
  8. Kraj tijela petlje for.
  9. Kraj tijela glavne () funkcije.

Funkcije popisa C ++

Evo uobičajenih funkcija std :: popisa:

Funkcija Opis
umetnuti() Ova funkcija ubacuje novu stavku prije položaja na koji usmjerava iterator.
odgurnuti() Ove funkcije dodaju novu stavku na kraju popisa.
push_front () Dodaje novu stavku na početku popisa.
pop_front () Briše prvu stavku popisa.
veličina() Ova funkcija određuje broj elemenata popisa.
ispred() Za određivanje prvih stavki popisa.
leđa() Za određivanje posljednje stavke popisa.
obrnuti () Obrne stavke popisa.
sjediniti() Spaja dva razvrstana popisa.

Konstruktori

Evo popisa funkcija koje pruža datoteka zaglavlja :

  • Zadani konstruktor std :: list :: list () - Stvara prazan popis, taj, s nula elemenata.
  • Konstruktor ispune std :: list :: list () - Stvara popis s n elemenata i svakom elementu dodjeljuje vrijednost nula (0).
  • Konstruktor raspona std :: list :: list () - stvara popis s mnogo elemenata u rasponu od prvog do zadnjeg.
  • Kopiraj konstruktor std :: list :: list () - Stvara popis s kopijom svakog elementa koji se nalazi na postojećem popisu.
  • Premjesti konstruktor std :: list :: list () - kreira popis s elementima drugog popisa pomoću semantike premještanja.
  • Konstruktor popisa inicijalizatora std :: list :: list () - Stvara popis s elementima drugog popisa pomoću semantike premještanja.

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

Izlaz:

Evo snimke zaslona koda:

Objašnjenje koda:

  1. Uključite iostream datoteku zaglavlja da biste koristili njegove funkcije.
  2. Uključite datoteku zaglavlja popisa da biste koristili njegove funkcije.
  3. Uključite std prostor imena u kôd da biste koristili njegove klase bez pozivanja.
  4. Pozovite glavnu () funkciju. Logiku programa treba dodati unutar tijela ove funkcije.
  5. Stvorite prazan popis s imenom l.
  6. Stvorite popis s imenom l1 sa skupom od 3 cijele brojeve.
  7. Stvorite popis s imenom l2 sa svim elementima na popisu pod nazivom l1, od početka do kraja.
  8. Stvorite popis s imenom l3 pomoću semantike premještanja. Popis l3 imat će isti sadržaj kao i popis l2.
  9. Ispišite veličinu popisa s imenom l na konzoli uz drugi tekst.
  10. Ispišite malo teksta na konzolu.
  11. Izradite iterator s imenom i koristite ga za itiranje preko elemenata popisa pod nazivom l2.
  12. Ispišite elemente popisa pod nazivom l2 na konzoli.
  13. Ispišite malo teksta na konzolu.
  14. Izradite iterator s imenom i koristite ga za itiranje preko elemenata popisa s imenom l3.
  15. Ispišite elemente popisa s imenom l3 na konzoli.
  16. Program mora vratiti vrijednost nakon uspješnog završetka.
  17. Kraj tijela glavne () funkcije.

Svojstva spremnika

Evo popisa svojstava spremnika:

Vlasništvo Opis
Slijed Spremnici za redoslijed svoje elemente poredavaju u strogom linearnom slijedu. Elementima se pristupa prema položaju u nizu.
Popis dvostruko povezan Svaki element ima informacije o tome kako locirati prethodne i sljedeće elemente. To omogućuje stalno vrijeme umetanja i brisanja.
Alokacijski svjestan Objekt raspodjele koristi se za dinamičko mijenjanje veličine pohrane.

Umetanje u popis

Postoje različite funkcije koje možemo koristiti za umetanje vrijednosti na popis. Pokažimo ovo:

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

Izlaz:

Evo snimke zaslona koda:

Objašnjenje koda:

  1. Uključite datoteku zaglavlja algoritma da biste koristili njegove funkcije.
  2. Uključite iostream datoteku zaglavlja da biste koristili njegove funkcije.
  3. Uključite datoteku zaglavlja popisa da biste koristili njegove funkcije.
  4. Pozovite glavnu () funkciju. Logiku programa treba dodati unutar tijela ove funkcije.
  5. Stvorite popis pod nazivom my_list sa skupom od 4 cijele brojeve.
  6. Umetnite element 11 na početak popisa pod nazivom moj_popis.
  7. Umetnite element 18 na kraj popisa pod nazivom my_list.
  8. Izradite iterator i pomoću njega pronađite element 10 s popisa my_list.
  9. Pomoću naredbe if utvrdite je li gore navedeni element pronađen ili nije.
  10. Umetnite element 21 prije gornjeg elementa ako je pronađen.
  11. Kraj tijela izjave if.
  12. Pomoću petlje for stvorite varijablu petlje x. Ova će se varijabla koristiti za prevrtanje elemenata popisa.
  13. Ispišite vrijednosti popisa na konzoli.
  14. Kraj tijela petlje for.
  15. Kraj tijela glavne () funkcije.

Brisanje s popisa

Moguće je izbrisati stavke s popisa. Funkcija brisanja () omogućuje vam brisanje stavki ili niza stavki s popisa.

  • Da biste izbrisali jednu stavku, jednostavno proslijedite jedan cijeli broj. Stavka će biti izbrisana.
  • Da biste izbrisali raspon, prosljeđujete početni i završni iterator. Pokažimo ovo.

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

Izlaz:

Evo snimke zaslona koda:

Objašnjenje koda:

  1. Uključite datoteku zaglavlja algoritma da biste koristili njegove funkcije.
  2. Uključite iostream datoteku zaglavlja da biste koristili njegove funkcije.
  3. Uključite datoteku zaglavlja popisa da biste koristili njegove funkcije.
  4. Uključite std prostor imena u naš program da koristi njegove klase bez poziva.
  5. Pozovite glavnu () funkciju. Logiku programa treba dodati unutar tijela ove funkcije.
  6. Stvorite popis pod nazivom my_list sa skupom od 4 cijele brojeve.
  7. Ispišite malo teksta na konzolu.
  8. Pomoću petlje for stvorite varijablu petlje x. Ova će se varijabla koristiti za prevrtanje elemenata popisa.
  9. Ispišite vrijednosti popisa na konzoli.
  10. Kraj tijela petlje for.
  11. Stvorite iterator i koji pokazuje na prvi element popisa.
  12. Upotrijebite funkciju erase () na koju upućuje iterator i.
  13. Ispišite malo teksta na konzolu.
  14. Pomoću petlje for stvorite varijablu petlje x. Ova će se varijabla koristiti za prevrtanje elemenata popisa.
  15. Ispišite vrijednosti popisa na konzoli. To dolazi nakon brisanja.
  16. Kraj tijela petlje for.
  17. Program mora vratiti vrijednost nakon uspješnog završetka.
  18. Kraj tijela glavne () funkcije.

Sažetak:

  • Popis std :: je spremnik za pohranu.
  • Omogućuje umetanje i brisanje predmeta s bilo kojeg mjesta u stalno vrijeme.
  • Provodi se kao dvostruka veza
  • Podaci std :: popisa mogu se pristupiti dvosmjerno i uzastopno.
  • std :: list ne podržava brzi nasumični pristup. Međutim, podržava sekvencijalni pristup iz svih pravaca.
  • Možete rasipati elemente popisa std :: list u različite dijelove memorije.
  • Po potrebi možete smanjiti ili proširiti std :: list s oba kraja tijekom izvođenja.
  • Da bismo umetnuli stavke u std :: list, koristimo funkciju insert ().
  • Da bismo izbrisali stavke sa popisa std ::, koristimo funkciju erase ().