Pinoa sisään C++ STL esimerkin kanssa
Mikä on std::stack?
Pino on tietorakenne, joka toimii LIFO-tekniikan (Last In First Out) perusteella. Std::stack sallii elementtien lisäämisen ja poistamisen vain toisesta päästä.
Std::stack-luokka on konttisovitin. Säilöobjektit sisältävät samantyyppisiä tietoja. Voit luoda pinon useista sarjasäiliöistä. Jos konttia ei toimiteta, deque-sisäilystä käytetään oletuksena. Säilösovittimet eivät tue iteraattoreita, joten niitä ei voi käyttää tietojen käsittelyyn.
Pinon syntaksi
Pinon luomiseksi meidän on sisällytettävä otsikkotiedosto koodissamme. Käytämme sitten tätä syntaksia määrittämään std::stack:
template <class Type, class Container = deque<Type> > class stack;
- Tyyppi – on std::pinon sisältämän elementin tyyppi. Se voi olla mikä tahansa kelvollinen C++ tyyppi tai jopa käyttäjän määrittämä tyyppi.
- Kontti – on taustalla olevan säiliöobjektin tyyppi.
Jäsentyypit
Tässä on pinon jäsentyypit:
- value_type- Ensimmäinen malliparametri, T. Se ilmaisee elementtityyppejä.
- container_type- Toinen mallin parametri, Container. Se ilmaisee taustalla olevan säiliötyypin.
- size_type- Signed integraalityyppi.
OperaStackissa
A C++ pino tukee seuraavia perustoimintoja:
- push – Se lisää/työntää kohteen pinoon.
- pop – Se poistaa/poistaa kohteen pinosta.
- peek – Palauttaa pinon ylimmän kohteen poistamatta sitä.
- isFull – Tarkistaa, onko pino täynnä.
- isEmpty – Tarkistaa, onko pino tyhjä.
Pinon toteutus
Vaihe 1) Meillä on aluksi tyhjä pino. Tyhjän pinon yläreunaksi on asetettu -1.
Vaihe 2) Seuraavaksi olemme työntäneet elementin 5 pinoon. Pinon yläosa osoittaa elementtiin 5.
Vaihe 3) Seuraavaksi olemme työntäneet elementin 50 pinoon. Pinon yläosa siirtyy ja osoittaa elementtiin 50.
Vaihe 4) Olemme sitten suorittaneet pop-operaation poistamalla ylimmän elementin pinosta. Elementti 50 pompataan pinosta. Pinon yläreuna osoittaa nyt elementtiin 5.
push() ja pop()
Pino::push()-funktiot lisäävät uuden kohteen pinon alkuun. Pinon kokoa kasvatetaan yhdellä lisäämisen jälkeen. Funktio ottaa tämän syntaksin:
stack.push(value)
Arvo on pinoon lisättävä kohde.
Pino:: pop()-funktio poistaa pinon ylimmän elementin. Tämä on pinon uusin kohde. Pinon kokoa pienennetään 1:llä poistamisen jälkeen. Tässä on funktion syntaksi:
stack.pop()
Toiminto ei ota parametreja.
Esimerkki 1:
#include <iostream> #include <stack> using namespace std; int main() { stack<int> st; st.push(10); st.push(20); st.push(30); st.push(40); st.pop(); st.pop(); while (!st.empty()) { cout << ' ' << st.top(); st.pop(); } }
lähtö:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä pinon otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
- Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tähän toimintoon.
- Luo pino st kokonaislukuarvojen tallentamiseksi.
- Käytä push()-funktiota lisätäksesi arvon 10 pinoon.
- Käytä push()-funktiota lisätäksesi arvon 20 pinoon.
- Käytä push()-funktiota lisätäksesi arvon 30 pinoon.
- Käytä push()-funktiota lisätäksesi arvon 40 pinoon.
- Käytä pop()-funktiota poistaaksesi pinosta ylimmän elementin, eli 40. Yläelementistä tulee nyt 30.
- Käytä pop()-funktiota poistaaksesi pinosta ylimmän elementin, eli 30. Yläelementistä tulee nyt 20.
- Käytä while-silmukkaa ja tyhjä()-funktiota tarkistaaksesi, onko pino EI tyhjä. ! on EI-operaattori.
- Pinon nykyisen sisällön tulostaminen konsoliin.
- Kutsu pinon pop()-funktiota.
- While-silmukan rungon loppu.
- Main()-funktion rungon loppu.
tyhjä(), koko(), top()
Pinoissa on sisäänrakennettuja toimintoja, joiden avulla voit leikkiä pinolla ja sen arvoilla. Nämä sisältävät:
- tyhjä()- tarkistaa, onko pino tyhjä vai ei.
- size()- palauttaa pinon koon, eli pinon elementtien lukumäärän.
- top()- käyttää pinoelementtiä yläosassa.
Esimerkki 2:
#include <iostream> #include <stack> using namespace std; void createStack(stack <int> mystack) { stack <int> ms = mystack; while (!ms.empty()) { cout << '\t' << ms.top(); ms.pop(); } cout << '\n'; } int main() { stack <int> st; st.push(32); st.push(21); st.push(39); st.push(89); st.push(25); cout << "The stack st is: "; createStack(st); cout << "\n st.size() : " << st.size(); cout << "\n st.top() : " << st.top(); cout << "\n st.pop() : "; st.pop(); createStack(st); return 0; }
lähtö:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisällytä iostream-otsikkotiedosto koodiimme, jotta voit käyttää sen toimintoja.
- Sisällytä pinon otsikkotiedosto koodiimme, jotta voit käyttää sen toimintoja.
- Sisällytä std-nimiavaruus ohjelmaamme, jotta voit käyttää sen luokkia kutsumatta sitä.
- Luo funktio createStack, jota voimme käyttää pinon mystackin luomiseen. Pino sisältää joukon kokonaislukuja.
- CreateStack-funktion rungon alku.
- Luo mystack-tietotyypin esiintymä ja anna sille nimi ms.
- Käytä while-silmukkaa ja tyhjä()-funktiota tarkistaaksesi, onko pino tyhjä.
- While-silmukan rungon alku.
- Käytä pinon yläosaan tallennettua top()-funktiota. \t-merkki luo uuden välilehden.
- Käytä pop()-funktiota poistaaksesi elementin pinon yläosassa.
- While-silmukan rungon loppu.
- Tulosta tyhjä rivi konsoliin.
- CreateStack-funktion rungon loppu.
- Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä main()-funktion runkoon.
- Toiminnon main() rungon alku.
- Luo pinoobjekti st.
- Käytä push()-funktiota lisätäksesi elementin 32 pinoon.
- Käytä push()-funktiota lisätäksesi elementin 21 pinoon.
- Käytä push()-funktiota lisätäksesi elementin 39 pinoon.
- Käytä push()-funktiota lisätäksesi elementin 89 pinoon.
- Käytä push()-funktiota lisätäksesi elementin 25 pinoon.
- Tulosta tekstiä konsoliin.
- Kutsu CreateStack-toiminto suorittaaksesi yllä olevat lisäystoiminnot pinoon.
- Tulosta pinon koko konsoliin muun tekstin viereen.
- Tulosta elementti konsolin pinon yläosassa.
- Tulosta tekstiä konsoliin.
- Poista pinon yläosassa oleva elementti. Sitten se palauttaa pinossa jäljellä olevat elementit.
- Suorita yllä olevat toiminnot kutsumalla createStack-funktiota.
- Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
- Funktion main() rungon loppu.
emplace() ja swap()
Nämä ovat muita sisäänrakennettuja pinotoimintoja:
- emplace()- rakentaa ja lisää sitten uuden elementin pinon alkuun.
- swap()- vaihtaa pinon sisällön toisen pinon sisältöön.
Esimerkki 3:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st1; stack<int> st2; st1.emplace(12); st1.emplace(19); st2.emplace(20); st2.emplace(23); st1.swap(st2); cout << "st1 = "; while (!st1.empty()) { cout << st1.top() << " "; st1.pop(); } cout << endl << "st2 = "; while (!st2.empty()) { cout << st2.top() << " "; st2.pop(); } }
lähtö:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä pinon otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä cstdlib-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
- Kutsu main()-funktiota. Ohjelmalogiikka lisätään tämän funktion runkoon.
- Määritä pino nimeltä st1 tallentaaksesi kokonaislukuarvot.
- Määritä pino nimeltä st2 tallentaaksesi kokonaislukuarvot.
- Käytä emplace()-funktiota lisätäksesi kokonaisluvun 12 pinoon nimeltä st1.
- Käytä emplace()-funktiota lisätäksesi kokonaisluvun 19 pinoon nimeltä st1.
- Käytä emplace()-funktiota lisätäksesi kokonaisluvun 20 pinoon nimeltä st2.
- Käytä emplace()-funktiota lisätäksesi kokonaisluvun 23 pinoon nimeltä st2.
- Käytä swap()-funktiota vaihtaaksesi kahden pinon, st1 ja st2, sisältöä. Pinon st1 sisältö tulee siirtää pinoon st2. Pinon st2 sisältö tulee siirtää pinoon st1.
- Tulosta tekstiä konsoliin.
- Käytä while-lausetta ja tyhjä()-funktiota tarkistaaksesi, onko pino st1 tyhjä.
- Tulosta pinon st1 sisältö konsoliin. ” ” lisää tilaa pinoelementtien väliin tulostettaessa niitä konsoliin.
- Suorita pop()-funktio pinossa st1 poistaaksesi ylimmän elementin.
- While-lauseen rungon loppu.
- Tulosta tekstiä konsoliin. Loppu on a C++ avainsana loppuriville. Se siirtää hiiren osoittimen seuraavalle riville tulostamisen aloittamiseksi sieltä.
- Käytä while-lausetta ja tyhjä()-funktiota tarkistaaksesi, onko pino st2 tyhjä.
- Tulosta pinon st2 sisältö konsoliin. ” ” lisää tilaa pinoelementtien väliin tulostettaessa niitä konsoliin.
- Suorita pop()-funktio pinossa st2 poistaaksesi ylimmän elementin.
- While-lauseen rungon loppu.
- Main()-funktion rungon loppu.
Pinoa STL:ssä
STL (Standard Template Library) sisältää malliluokkia, jotka tarjoavat yhteisiä C++ tietorakenteita. Siksi pino voidaan toteuttaa myös STL:ssä. Sisällytämme tämän kirjaston vain koodiimme ja käytämme sitä pinon määrittämiseen.
stack<T> st;
Yllä oleva syntaksi ilmoittaa pinon st tietotyypin T elementeille.
Esimerkki 4:
#include <iostream> #include <stack> #include <cstdlib> using namespace std; int main() { stack<int> st; st.push(12); st.push(19); st.push(20); cout << st.top(); cout << st.size(); }
lähtö:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä pinon otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä cstdlib-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
- Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tämän funktion runkoon.
- Määritä pino st kokonaislukutietojen tallentamiseksi.
- Lisää elementti 12 pinoon.
- Lisää elementti 19 pinoon.
- Lisää elementti 20 pinoon.
- Tulosta elementti konsolin pinon yläosassa.
- Tulosta pinon koko konsoliin.
- Funktion main() rungon loppu.
Yhteenveto
- Pino on tietorakenne, joka toimii LIFO-tekniikan (Last In first Out) perusteella.
- Std::pino sallii kohteiden lisäämisen ja poistamisen vain toisesta päästä.
- Std::pinoluokka on konttisovitin, joka sisältää samantyyppisiä kohteita.
- Pino voidaan luoda erilaisista sekvenssisäiliöistä.
- Jos et anna säilöä, tyhjennyssäiliötä käytetään oletuksena.
- Push()-funktio on tarkoitettu kohteiden lisäämiseen pinoon.
- Pop()-funktio on tarkoitettu ylimmän kohteen poistamiseen vaiheesta.
- Tyhjä()-funktio on tarkoitettu tarkistamaan, onko pino tyhjä vai ei.