Š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:
- Uključite datoteku zaglavlja algoritma da biste koristili njegove funkcije.
- Uključite iostream datoteku zaglavlja da biste koristili njegove funkcije.
- Uključite datoteku zaglavlja popisa da biste koristili njegove funkcije.
- Pozovite glavnu () funkciju. Logiku programa treba dodati unutar tijela ove funkcije.
- Stvorite popis pod nazivom my_list sa skupom od 4 cijele brojeve.
- Pomoću petlje for stvorite varijablu petlje x. Ova će se varijabla koristiti za prevrtanje elemenata popisa.
- Ispišite vrijednosti popisa na konzoli.
- Kraj tijela petlje for.
- 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:
- Uključite iostream datoteku zaglavlja da biste koristili njegove funkcije.
- Uključite datoteku zaglavlja popisa da biste koristili njegove funkcije.
- Uključite std prostor imena u kôd da biste koristili njegove klase bez pozivanja.
- Pozovite glavnu () funkciju. Logiku programa treba dodati unutar tijela ove funkcije.
- Stvorite prazan popis s imenom l.
- Stvorite popis s imenom l1 sa skupom od 3 cijele brojeve.
- Stvorite popis s imenom l2 sa svim elementima na popisu pod nazivom l1, od početka do kraja.
- Stvorite popis s imenom l3 pomoću semantike premještanja. Popis l3 imat će isti sadržaj kao i popis l2.
- Ispišite veličinu popisa s imenom l na konzoli uz drugi tekst.
- Ispišite malo teksta na konzolu.
- Izradite iterator s imenom i koristite ga za itiranje preko elemenata popisa pod nazivom l2.
- Ispišite elemente popisa pod nazivom l2 na konzoli.
- Ispišite malo teksta na konzolu.
- Izradite iterator s imenom i koristite ga za itiranje preko elemenata popisa s imenom l3.
- Ispišite elemente popisa s imenom l3 na konzoli.
- Program mora vratiti vrijednost nakon uspješnog završetka.
- 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:
- Uključite datoteku zaglavlja algoritma da biste koristili njegove funkcije.
- Uključite iostream datoteku zaglavlja da biste koristili njegove funkcije.
- Uključite datoteku zaglavlja popisa da biste koristili njegove funkcije.
- Pozovite glavnu () funkciju. Logiku programa treba dodati unutar tijela ove funkcije.
- Stvorite popis pod nazivom my_list sa skupom od 4 cijele brojeve.
- Umetnite element 11 na početak popisa pod nazivom moj_popis.
- Umetnite element 18 na kraj popisa pod nazivom my_list.
- Izradite iterator i pomoću njega pronađite element 10 s popisa my_list.
- Pomoću naredbe if utvrdite je li gore navedeni element pronađen ili nije.
- Umetnite element 21 prije gornjeg elementa ako je pronađen.
- Kraj tijela izjave if.
- Pomoću petlje for stvorite varijablu petlje x. Ova će se varijabla koristiti za prevrtanje elemenata popisa.
- Ispišite vrijednosti popisa na konzoli.
- Kraj tijela petlje for.
- 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:
- Uključite datoteku zaglavlja algoritma da biste koristili njegove funkcije.
- Uključite iostream datoteku zaglavlja da biste koristili njegove funkcije.
- Uključite datoteku zaglavlja popisa da biste koristili njegove funkcije.
- Uključite std prostor imena u naš program da koristi njegove klase bez poziva.
- Pozovite glavnu () funkciju. Logiku programa treba dodati unutar tijela ove funkcije.
- Stvorite popis pod nazivom my_list sa skupom od 4 cijele brojeve.
- Ispišite malo teksta na konzolu.
- Pomoću petlje for stvorite varijablu petlje x. Ova će se varijabla koristiti za prevrtanje elemenata popisa.
- Ispišite vrijednosti popisa na konzoli.
- Kraj tijela petlje for.
- Stvorite iterator i koji pokazuje na prvi element popisa.
- Upotrijebite funkciju erase () na koju upućuje iterator i.
- Ispišite malo teksta na konzolu.
- Pomoću petlje for stvorite varijablu petlje x. Ova će se varijabla koristiti za prevrtanje elemenata popisa.
- Ispišite vrijednosti popisa na konzoli. To dolazi nakon brisanja.
- Kraj tijela petlje for.
- Program mora vratiti vrijednost nakon uspješnog završetka.
- 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 ().