lists stl
Aflați totul despre listele din STL împreună cu implementarea sa.
Listele sunt containere secvențiale. Listele conțin elemente în locații non-contigue. Am discutat matrici și vectori în tutorialele noastre anterioare.
În cazul containerelor matrice și vectoriale, deoarece aceste containere stochează date în memoria alăturată, operația de inserare în mijlocul acestor containere se dovedește a fi foarte costisitoare, deoarece trebuie să schimbăm elementele existente în consecință pentru a face spațiu pentru noul element.
=> Consultați aici pentru a explora lista completă de tutoriale C ++.
c ++ convertește caracterul în int
Ce veți învăța:
Prezentare generală
Lista este un container care depășește acest dezavantaj al containerelor matrice și vectoriale. Ne permite să inserăm elemente oriunde în listă fără a provoca o mare parte a cheltuielilor generale. Dar listele sunt mai lente decât vectorii în ceea ce privește traversarea.
În acest tutorial, vom vedea implementarea listelor în STL împreună cu diferitele operații de traversare, manipulări și listă de acces cu exemple.
Rețineți că majoritatea operațiunilor de listă sunt similare cu cele ale vectorilor și, prin urmare, cititorii care au citit deja tutorialul nostru despre vectori nu vor avea probleme în interpretarea conceptelor de listă.
Declarație și inițializare
Pentru implementarea containerului listelor și utilizarea tuturor beneficiilor sale, trebuie să includem un fișier antet în programul nostru.
#include
Declarația generală pentru containerul listă este
std::list listName;
De exemplu,putem declara o listă numită „lista mea” de tip int după cum urmează:
std::list mylist;
De asemenea, putem inițializa lista în momentul declarării sau adăuga elemente la aceasta folosind una dintre operațiunile pe care le acceptă.
Să vedem cum putem inițializa lista pe care am creat-o mai sus.
std::list mylist = {1, 1, 2, 3, 5};
Inițializarea de mai sus va fi prezentată în memorie așa cum se arată mai jos:
Odată ce am inițializat lista, putem accesa elementele unei liste folosind un iterator. Funcțiile Iterator „începe” și „sfârșit” ne ajută să parcurgem elementele listei.
Notă: Iteratorul pentru listă acceptă, de asemenea, alți iteratori, cum ar fi iteratorii inversi (rbegin, rend), iteratorii constanți (cbegin, cend) și iteratorii inverse constanți (crbegin, crend) și pot fi utilizați în mod similar ca vectorii.
Următorul exemplu arată acest lucru.
#include #include #include #include using namespace std; int main() { list mylist = {1, 1, 2, 3, 5}; cout<<”List elements are: “; list::iterator it; for(it=mylist.begin();it!=mylist.end();++it) cout<<*it<<” “; }
Ieșire:
Elementele listei sunt: 1 1 2 3 5
Astfel, în exemplul de mai sus, am declarat o listă a secvenței Fibonacci. Apoi, declarăm un iterator de același tip cu lista și apoi folosind pentru buclă, imprimăm conținutul listei de la început până la sfârșit.
Acum să trecem la operațiunile sau funcțiile pe care ni le oferă containerul din STL.
Lista operațiunilor
- Introduce: Folosit pentru a insera un element în poziția dată. Returnează un iterator care indică primul element inserat.
insert (pos, num_elem, elem)
Unde,
pos => Poziția în care urmează să fie inserate elemente noi.
num_elem => Numărul de elemente care trebuie inserate; implicit la 1.
item => Valoarea reală de inserat.
Să înțelegem funcția de inserare luând un exemplu.
#include #include // for list operations using namespace std; int main() { list mylist = {1,1,2}; list::iterator it = mylist.begin(); // iterator to point to 4th position advance(it,` 3); // inserts 3 at 4th position mylist.insert(it, 3); cout << 'The list after inserting' << ' 1 element using insert() is : '; for (list::iterator i = mylist.begin();i != mylist.end();i++) cout << *i << ' '; cout << endl; }
Ieșire:
Lista după inserarea unui element folosind insert () este: 1 1 2 3
Acesta este un exemplu pentru a insera un singur element la 4apoziția în listă, care este în cele din urmă ultima poziție. Prin urmare, mai întâi, avem o listă pentru care am definit iteratorul care indică începutul listei. Apoi trecem acest iterator la 4apoziția și apoi apelați insert pentru a insera 1 element.
De asemenea, putem insera mai multe elemente, specificând al doilea parametru în funcția de inserare. Ori de câte ori nu este specificat, valoarea implicită este 1.
- împinge înapoi :Adaugă un element nou la sfârșitul listei.
- push_front :Adaugă un element nou la începutul listei.
Să vedem un exemplu care demonstrează utilizarea funcțiilor push_back și push_front.
#include #include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3}; cout<<'List elements are: '; printlist(mylist); mylist.push_front(0); mylist.push_back(5); cout<<'
List contents after push_front and push_back: '; printlist(mylist); }
Ieșire:
Elementele listei sunt: 1 1 2 3
Lista conținutului după push_front și push_back: 0 1 1 2 3 5
În acest exemplu, mai întâi creăm și listăm toate cele două elemente, unul în față și în spate folosind funcțiile push_front și respectiv push_back. Ieșirea arată lista modificată după executarea ambelor funcții.
- pop_back :Elimină ultimul element din listă micșorând astfel dimensiunea listei cu 1.
- pop_front :Elimină primul element din listă micșorând astfel dimensiunea listei cu 1.
Următorul exemplu arată utilizarea operațiunilor pop_back și pop_front din listă.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); mylist.pop_front(); mylist.pop_back(); cout<<'
List contents after push_front and push_back: '; printlist(mylist); }
Ieșire:
Elementele listei sunt: 1 1 2 3 5
Lista conținutului după push_front și push_back: 1 2 3
Așa cum este descris în definiția operațiunilor, fiecare dintre operații pop_front și pop_back elimină elementul din fața și din spate ale listei, adică primul și ultimul element al listei și, astfel, de fiecare dată când reduce dimensiunea listei cu 1.
- mărimea :Returnează dimensiunea listei, adică numărul de elemente din listă.
- gol :Verifică dacă lista este goală.
- şterge :Elimină un element sau o gamă de elemente din listă.
- clar :Elimină toate elementele din listă făcându-le la dimensiunea 0.
Dat mai jos este un exemplu pentru a demonstra utilizarea tuturor funcțiilor de mai sus, adică mărimea, golirea, ștergerea și ștergerea.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); cout<<'size of the list: '< Ieșire:
Elementele listei sunt: 1 1 2 3 5
dimensiunea listei: 5
Lista după ștergerea primului element: 1 2 3 5
Noua dimensiune a listei: 4
dimensiunea listei după clar: 0
Programul de mai sus demonstrează toate cele patru funcții legate de capacitatea listei. Vedem că dimensiunea listei scade cu 1 când ștergem 1 element din listă. În timp ce apelăm o operațiune clară pe listă, dimensiunea este 0, ceea ce înseamnă că toate elementele din listă sunt eliminate.
- față :Returnează valoarea primului element al listei.
- înapoi :Returnează valoarea ultimului element al listei.
- swap :Schimbă conținutul unei liste cu conținutul unei alte liste de aceeași dimensiune și tip.
- verso :Un algoritm care inversează lista.
- fel :Sortează lista dată.
Exemplul de mai jos demonstrează utilizarea funcțiilor față, spate, inversă, sortare și swap.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); cout<<'
Front of the list: '< Ieșire:
Elementele listei sunt: 1 1 2 3 5
Fața listei: 1
În spatele listei: 5
Lista inversată: 5 3 2 1 1
Conținutul listei impare: 1 3 5 7 9
După schimbare
lista mea: 1 3 5 7 9
Listă impară: 5 3 2 1 1
În acest cod, mai întâi, imprimăm valorile din față și din spate ale listei mele. Apoi, această listă este inversată și lista inversată este tipărită. După aceea, definim încă o listă de numere impare care nu este în nici o ordine și apelăm algoritmul „Sortare” pentru a sorta această listă. Apoi schimbăm cele două liste folosind funcția swap și imprimăm listele schimbate.
- lipitură :Această funcție este utilizată pentru a transfera conținutul unei liste pe o altă listă într-o poziție specificată.
Ambele liste trebuie să fie de același tip.
splice (poziție, listă);
Unde,
poziție => Poziția în care urmează să fie transferat conținutul listei.
list => Lista ale cărei elemente urmează să fie transferate.
Exemplul dat mai jos prezintă utilizarea funcției de îmbinare.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 8,13}; cout<<'List elements are: '; printlist(mylist); list seclist = {2,3,5}; cout<<'list to be spliced: '; printlist(seclist); list:: iterator it = mylist.begin(); it ++; it++; mylist.splice(it,seclist); cout<<'
List contents after splicing at position 2: '; printlist(mylist); }
Ieșire:
Elementele listei sunt: 1 1 8 13
lista de îmbinat: 2 3 5
Lista conținutului după îmbinarea la poziția 2: 1 1 2 3 5 8 13
exemplu arată că folosim două liste. În primul rând, iteratorul pentru lista mea este mutat în două poziții și apoi funcția de îmbinare este apelată pentru a transfera conținutul celei de-a doua liste în a treia poziție a primei liste.
- merge :Spre deosebire de funcția de îmbinare care poate fi utilizată pentru a transfera conținutul unei liste la alta la o anumită poziție, operația de fuzionare fuzionează direct două liste pentru a forma o singură listă. Pentru operațiunea de îmbinare, ambele liste trebuie să fie în ordine sortată.
Dat mai jos este un exemplu pentru a demonstra funcția de îmbinare.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1,2,3,5,8}; list seclist = {4,6,7}; cout<<'First List: '; printlist(mylist); cout< Ieșire:
Prima listă: 11 2 3 5 8
Lista a doua: 4 6 7
Conține lista după îmbinarea a două liste:
1 1 2 3 4 5 6 7 8
Astfel, în programul de mai sus, avem două liste care sunt sortate. Numim operațiunea de îmbinare pe aceste două liste. Lista rezultată este o listă sortată care conține elementele ambelor liste.
sisteme de operare open source pentru pc
Concluzie
Am ajuns la sfârșitul acestui tutorial despre Liste în STL. Sperăm că acest tutorial v-ar fi oferit cunoștințe imense despre listele din STL.
=> Verificați aici pentru a vedea A-Z a tutorialelor de formare C ++ aici.
Lectură recomandată