lists stl
Spoznajte vse sezname v STL skupaj z njihovo izvedbo.
Seznami so zaporedni vsebniki. Seznami vsebujejo elemente na neomejenih lokacijah. V prejšnjih vajah smo razpravljali o nizih in vektorjih.
V primeru vsebnikov matrike in vektorjev, ker ti vsebniki shranjujejo podatke v neprekinjenem pomnilniku, se vstavljanje na sredini teh vsebnikov izkaže za zelo drago, saj moramo ustrezno premakniti obstoječe elemente, da naredimo prostor za nov element.
=> Glejte tukaj, če želite raziskati celoten seznam vadnic za C ++.
java kodiranje intervju vprašanja za izkušene
Kaj se boste naučili:
Pregled
Seznam je vsebnik, ki premaga to pomanjkljivost nizov in vektorskih vsebnikov. Omogoča nam, da elemente vstavimo kamor koli na seznam, ne da bi pri tem nastali večji stroški. Vendar so seznami počasnejši od vektorjev, kar zadeva prečkanje.
V tej vadnici bomo videli izvajanje seznamov v STL skupaj z različnimi operacijami prečkanja, manipulacij in dostopa do seznama s primeri.
Upoštevajte, da je večina operacij s seznami podobnih vektorskim, zato bralci, ki so že prebrali našo vadnico o vektorjih, ne bodo imeli težav pri interpretaciji konceptov seznamov.
Izjava in inicializacija
Za izvedbo vsebnika seznama in uporabo vseh njegovih prednosti moramo v naš program vključiti datoteko z glavo.
#include
Splošna izjava za vsebnik seznama je
std::list listName;
Na primer,seznam z imenom 'mylist' tipa int lahko razglasimo na naslednji način:
std::list mylist;
Seznam lahko tudi inicializiramo v času izjave ali mu dodamo elemente z eno od operacij, ki jih podpira.
Poglejmo, kako lahko inicializiramo zgoraj ustvarjeni seznam.
std::list mylist = {1, 1, 2, 3, 5};
Zgornja inicializacija bo zapisana v spomin, kot je prikazano spodaj:
Ko seznam inicializiramo, lahko do elementov seznama dostopamo s pomočjo iteratorja. Funkcije Iterator ‘start’ in ‘end’ nam pomagajo pri prehodu skozi elemente seznama.
Opomba: Iterator za seznam podpira tudi druge iteratorje, kot so povratni iteratorji (rbegin, rend), konstantni iteratorji (cbegin, cend) in konstantni povratni iteratorji (crbegin, crend) in se lahko uporabljajo na podoben način kot vektorji.
Naslednji primer to pokaže.
#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<<” “; }
Izhod:
Elementi seznama so: 1 1 2 3 5
Tako smo v zgornjem primeru razglasili seznam Fibonaccijevega zaporedja. Nato razglasimo iterator iste vrste kot seznam in nato z zanko for natisnemo vsebino seznama od začetka do konca.
Zdaj pa pojdimo na operacije ali funkcije, ki jih vsebuje vsebnik s seznami v STL.
Seznam operacij
- Vstavi: Uporablja se za vstavljanje elementa v dani položaj. Vrne iterator, ki kaže na prvi vstavljeni element.
vstavi (pos, num_elem, elem)
Kje,
pos => Položaj, na katerem je treba vstaviti nove elemente.
num_elem => Število elementov, ki jih je treba vstaviti; privzeto 1.
element => Vstavi dejansko vrednost.
Dovolite nam, da razumemo funkcijo vstavljanja na primeru.
#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; }
Izhod:
Seznam po vstavitvi 1 elementa z uporabo insert () je: 1 1 2 3
To je primer vstavitve samo enega elementa v 4thna seznamu, ki je na koncu zadnje mesto. Zato imamo najprej seznam, za katerega smo definirali iterator, ki kaže na začetek seznama. Nato ta iterator premaknemo na 4thpoložaj in nato pokličite insert, da vstavite 1 element.
Prav tako lahko vstavimo več elementov, tako da v funkciji vstavljanja določimo drugi parameter. Kadar ni določen, je privzeto 1.
- porini nazaj :Na koncu seznama doda nov element.
- push_front :Na začetku seznama doda nov element.
Oglejmo si primer, ki prikazuje uporabo funkcij push_back in 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); }
Izhod:
Elementi seznama so: 1 1 2 3
Vsebina seznama po push_front in push_back: 0 1 1 2 3 5
V tem primeru najprej ustvarimo in mu naštejemo vsa dva elementa, po enega spredaj in zadaj s pomočjo funkcij push_front oziroma push_back. Izhod prikazuje spremenjeni seznam po izvedbi obeh funkcij.
- pop_back :Odstrani zadnji element na seznamu in s tem zmanjša velikost seznama za 1.
- pop_front :Odstrani prvi element na seznamu in s tem zmanjša velikost seznama za 1.
Naslednji primer prikazuje uporabo operacij pop_back in pop_front na seznamu.
#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); }
Izhod:
Elementi seznama so: 1 1 2 3 5
Vsebina seznama po push_front in push_back: 1 2 3
Kot je opisano v definiciji operacij, vsaka od operacij pop_front in pop_back odstrani element s sprednje in zadnje strani seznama, tj. Prvi oziroma zadnji element seznama, s čimer vsakič zmanjša velikost seznama za 1.
- velikost :Vrne velikost seznama, tj. Število elementov na seznamu.
- prazno :Preveri, če je seznam prazen.
- izbriši :Odstrani element ali obseg elementov s seznama.
- jasno :Odstrani vse elemente s seznama, tako da postane velikost 0.
Spodaj je primer za prikaz uporabe vseh zgoraj navedenih funkcij, tj. Velikost, prazno, brisanje in čiščenje.
#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: '< Izhod:
Elementi seznama so: 1 1 2 3 5
velikost seznama: 5
Seznam po brisanju prvega elementa: 1 2 3 5
Nova velikost seznama: 4
velikost seznama po čiščenju: 0
Zgornji program prikazuje vse štiri funkcije, povezane z zmogljivostjo seznama. Vidimo, da se velikost seznama zmanjša za 1, ko izbrišemo 1 element s seznama. Ko na seznamu pokličemo jasno operacijo, je velikost 0, kar pomeni, da so vsi elementi na seznamu odstranjeni.
- spredaj :Vrne vrednost prvega elementa seznama.
- nazaj :Vrne vrednost zadnjega elementa seznama.
- zamenjati :Vsebino enega seznama zamenja z vsebino drugega seznama enake velikosti in vrste.
- vzvratno :Algoritem, ki obrne seznam.
- razvrsti :Razvrsti dani seznam.
Spodnji primer prikazuje uporabo funkcij spredaj, zadaj, vzvratno, razvrščanje in zamenjavo.
#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: '< Izhod:
Elementi seznama so: 1 1 2 3 5
Spredaj na seznamu: 1
Nazaj na seznam: 5
Obrnjen seznam: 5 3 2 1 1
Vsebina čudnega seznama: 1 3 5 7 9
Po zamenjavi
moj seznam: 1 3 5 7 9
Čudni seznam: 5 3 2 1 1
V tej kodi najprej natisnemo sprednjo in zadnjo vrednost seznama mylist. Nato se ta seznam obrne in obrnjeni seznam se natisne. Po tem določimo še en seznam lihih števil, ki ni v nobenem vrstnem redu, in za razvrščanje tega seznama pokličemo algoritem 'Razvrsti'. Nato oba seznama zamenjamo s funkcijo zamenjave in natisnemo izmenjane sezname.
- spajanje :Ta funkcija se uporablja za prenos vsebine enega seznama na drug seznam na določenem mestu.
Oba seznama morata biti iste vrste.
spajanje (položaj, seznam);
kje,
position => Položaj, na katerega naj se prenese vsebina seznama.
list => Seznam, katerega elemente je treba prenesti.
kako narediti požarni zid
Spodnji primer prikazuje uporabo funkcije spajanja.
#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); }
Izhod:
Elementi seznama so: 1 1 8 13
seznam za spajanje: 2 3 5
Vsebina seznama po spajanju na položaju 2: 1 1 2 3 5 8 13
The primer kaže, da uporabljamo dva seznama. Najprej se iterator za moj seznam premakne na dva položaja, nato pa se pokliče funkcija spajanja za prenos vsebine drugega seznama na tretje mesto prvega seznama.
- pojdi :Za razliko od funkcije spajanja, ki jo lahko uporabimo za prenos vsebine enega seznama na drugega na določenem položaju, postopek spajanja neposredno združi dva seznama in tvori en sam seznam. Za spajanje morata biti seznama razvrščena po vrstnem redu.
Spodaj je primer za prikaz funkcije spajanja.
#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< Izhod:
Prvi seznam: 11 2 3 5 8
Drugi seznam: 4 6 7
Vsebina seznama po združitvi dveh seznamov:
1 1 2 3 4 5 6 7 8
Tako imamo v zgornjem programu razvrščena dva seznama. Na teh dveh seznamih imenujemo spajanje. Rezultatni seznam je razvrščen seznam, ki vsebuje elemente obeh seznamov.
Zaključek
Prišli smo do konca te vadnice o Seznamih v STL. Upamo, da bi vam ta vadnica dala neizmerno znanje o seznamih v STL.
=> Tukaj si oglejte A-Z o vajah za usposabljanje za C ++.
Priporočeno branje
- Prednostna vrsta v STL
- KARTE V STL
- SET V STL
- Skladi in čakalne vrste v STL
- Python List - Ustvarjanje, dostop, rezanje, dodajanje ali brisanje elementov
- Konstante v jeziku C ++
- Predmeti datoteke VBScript: CopyFile, DeleteFile, OpenTextFile, branje in pisanje besedilne datoteke
- Seznami inicializatorjev v jeziku C ++