Virna sisse C++ STL näitega
Mis on std::stack?
Virn on andmestruktuur, mis töötab LIFO (Last In First Out) tehnikal. Std::stack võimaldab elemente lisada ja eemaldada ainult ühest otsast.
Std::stack klass on konteineri adapter. Konteinerobjektid sisaldavad sarnast andmetüüpi andmeid. Saate luua virna erinevatest jadakonteineritest. Kui konteinerit ei esitata, kasutatakse vaikimisi deque-konteinerit. Konteineridapterid ei toeta iteraatoreid, seega ei saa neid andmetega manipuleerimiseks kasutada.
Virna süntaks
Virna loomiseks peame kaasama päisefail meie koodis. Seejärel kasutame seda süntaksit std::stack:
template <class Type, class Container = deque<Type> > class stack;
- KASUTUSALA – on std::stackis sisalduva elemendi tüüp. See võib olla ükskõik milline kehtiv C++ tüüp või isegi kasutaja määratud tüüp.
- Konteiner – on aluseks oleva konteineri objekti tüüp.
Liikmete tüübid
Siin on virnaliikmete tüübid:
- value_type- esimene malli parameeter T. See tähistab elementide tüüpe.
- konteineri tüüp – malli teine parameeter, konteiner. See tähistab aluseks olevat konteineri tüüpi.
- suuruse_tüüp – märgita integraaltüüp.
OperaStackis
A C++ stack toetab järgmisi põhitoiminguid:
- push – lisab/lükkab üksuse virna.
- pop – see eemaldab/hüppab üksuse virnast.
- piiluma – tagastab virna ülemise üksuse seda eemaldamata.
- isFull – kontrollib, kas virn on täis.
- isEmpty – kontrollib, kas virn on tühi.
Virna rakendamine
Step 1) Meil on esialgu tühi virn. Tühja virna ülaosa väärtus on -1.
Step 2) Järgmiseks oleme lükanud elemendi 5 virna. Virna ülaosa osutab elemendile 5.
Step 3) Järgmiseks oleme lükanud elemendi 50 virna. Virna ülaosa nihkub ja osutab elemendile 50.
Step 4) Seejärel tegime pop-operatsiooni, eemaldades virnast ülemise elemendi. Element 50 tõstetakse virnast välja. Virna ülaosa osutab nüüd elemendile 5.
push () ja pop ()
Funktsioonid virn::push() lisavad uue üksuse virna ülaossa. Pärast sisestamist suurendatakse virna suurust 1 võrra. Funktsioon võtab järgmise süntaksi:
stack.push(value)
Väärtus on üksus, mis tuleb virna sisestada.
Funktsioon Virn:: pop() eemaldab virna ülemise elemendi. See on virna uusim üksus. Pärast eemaldamist vähendatakse virna suurust 1 võrra. Siin on funktsiooni süntaks:
stack.pop()
Funktsioon ei võta parameetreid.
Näide 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(); } }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
- Selle funktsioonide kasutamiseks lisage meie koodi virna päise fail.
- Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Kutsuge välja funktsioon main(). Selle funktsiooni sisse tuleks lisada programmiloogika.
- Looge täisarvuliste väärtuste salvestamiseks virn st.
- Kasutage funktsiooni push(), et sisestada virna väärtus 10.
- Kasutage funktsiooni push(), et sisestada virna väärtus 20.
- Kasutage funktsiooni push(), et sisestada virna väärtus 30.
- Kasutage funktsiooni push(), et sisestada virna väärtus 40.
- Kasutage funktsiooni pop(), et eemaldada virnast ülemine element, see tähendab 40. Ülemine element saab nüüd 30-ks.
- Funktsiooni pop() abil eemaldage virust ülemine element, see tähendab 30. Ülemine element saab nüüd 20-ks.
- Kontrollige, kas virn EI ole tühi, kasutage while-silmust ja tühja() funktsiooni. ! on operaator EI.
- Konsooli virna praeguse sisu printimine.
- Kutsuge virna funktsiooni pop().
- While-ahela keha lõpp.
- Funktsiooni main() keha lõpp.
tühi(), suurus(), top()
Virnadel on sisseehitatud funktsioonid, mida saate kasutada virna ja selle väärtustega mängimiseks. Nende hulka kuuluvad:
- tühi()- kontrollib, kas virn on tühi või mitte.
- suurus()- tagastab virna suuruse, st elementide arvu virnas.
- top()- pääseb juurde ülaosas olevale virnaelemendile.
Näide 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; }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
- Selle funktsioonide kasutamiseks lisage meie koodi virna päise fail.
- Lisage meie programmi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Looge funktsioon createStack, mida saame kasutada virna mystacki loomiseks. Virn sisaldab täisarvude komplekti.
- Funktsiooni createStack keha algus.
- Looge mystacki andmetüübi eksemplar ja andke sellele nimi ms.
- Kasutage tsüklit while ja tühja() funktsiooni, et kontrollida, kas virn on tühi.
- While-tsükli keha algus.
- Kasutage virna ülaossa salvestatud funktsiooni top(). Märk \t loob uue vahekaardi.
- Kasutage virna ülaosas oleva elemendi kustutamiseks funktsiooni pop().
- While-ahela keha lõpp.
- Printige konsoolile tühi rida.
- Funktsiooni createStack keha lõpp.
- Kutsuge välja funktsioon main(). Programmi loogika tuleks lisada funktsiooni main() kehasse.
- Funktsiooni main() keha algus.
- Loo virnaobjekt st.
- Kasutage funktsiooni push(), et sisestada element 32 virna.
- Kasutage funktsiooni push(), et sisestada element 21 virna.
- Kasutage funktsiooni push(), et sisestada element 39 virna.
- Kasutage funktsiooni push(), et sisestada element 89 virna.
- Kasutage funktsiooni push(), et sisestada element 25 virna.
- Printige konsoolile teksti.
- Kutsuge üles funktsioon createStack, et täita ülaltoodud virna sisestamise toiminguid.
- Printige muu teksti kõrvale konsooli virna suurus.
- Printige konsooli virna ülaosas olev element.
- Printige konsoolile teksti.
- Kustutage virna ülaosas olev element. Seejärel tagastab see virna jäänud elemendid.
- Ülaltoodud toimingute tegemiseks helistage funktsioonile createStack.
- Programm peab pärast edukat lõpetamist tagastama väärtuse.
- Funktsiooni main() keha lõpp.
emplace() ja swap()
Need on muud sisseehitatud virna funktsioonid:
- emplace()- konstrueerib ja lisab seejärel uue elemendi virna ülaossa.
- swap() – vahetab virna sisu teise virna sisuga.
Näide 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(); } }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
- Selle funktsioonide kasutamiseks lisage meie koodi virna päise fail.
- Selle funktsioonide kasutamiseks lisage meie koodi meie koodi päisefail cstdlib.
- Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Kutsuge funktsioon main(). Programmi loogika lisatakse selle funktsiooni kehasse.
- Täisarvude väärtuste salvestamiseks deklareerige virn nimega st1.
- Täisarvude väärtuste salvestamiseks deklareerige virn nimega st2.
- Kasutage funktsiooni emplace(), et sisestada täisarv 12 virna nimega st1.
- Kasutage funktsiooni emplace(), et sisestada täisarv 19 virna nimega st1.
- Kasutage funktsiooni emplace(), et sisestada täisarv 20 virna nimega st2.
- Kasutage funktsiooni emplace(), et sisestada täisarv 23 virna nimega st2.
- Kasutage funktsiooni swap(), et vahetada kahe virna, st1 ja st2, sisu. Virna st1 sisu tuleks teisaldada virna st2. Virna st2 sisu tuleks teisaldada virna st1.
- Printige konsoolile teksti.
- Kasutage lauset while ja funktsiooni empty(), et kontrollida, kas pinu st1 pole tühi.
- Printige konsoolile virna st1 sisu. " " lisab virnaelementide vahele ruumi nende konsoolile printimisel.
- Ülemise elemendi eemaldamiseks käivitage virnas st1 funktsioon pop().
- Avaldise while põhiosa lõpp.
- Printige konsoolile teksti. Endl on a C++ märksõna lõpurea jaoks. See viib hiirekursori järgmisele reale, et alustada sealt printimist.
- Kasutage lauset while ja funktsiooni empty(), et kontrollida, kas pinu st2 pole tühi.
- Printige konsoolile virna st2 sisu. " " lisab virnaelementide vahele ruumi nende konsoolile printimisel.
- Ülemise elemendi eemaldamiseks käivitage virnas st2 funktsioon pop().
- Avaldise while põhiosa lõpp.
- Funktsiooni main() keha lõpp.
Virna STL-is
STL (Standard Template Library) on varustatud malliklassidega, mis pakuvad ühist C++ andmestruktuurid. Seetõttu saab virna rakendada ka STL-is. Lisame selle teegi lihtsalt oma koodi ja kasutame seda virna määratlemiseks.
stack<T> st;
Ülaltoodud süntaks deklareerib andmetüübi T elementidele virna st.
Näide 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(); }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Selle funktsioonide kasutamiseks lisage meie koodi iostreami päisefail.
- Selle funktsioonide kasutamiseks lisage meie koodi virna päise fail.
- Selle funktsioonide kasutamiseks lisage meie koodi meie koodi päisefail cstdlib.
- Lisage meie koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Kutsuge funktsioon main(). Programmi loogika tuleks lisada selle funktsiooni kehasse.
- Täisarvuandmete salvestamiseks deklareerige virn st.
- Lisage virnasse element 12.
- Lisage virnasse element 19.
- Lisage virnasse element 20.
- Printige konsooli virna ülaosas olev element.
- Printige konsoolile virna suurus.
- Funktsiooni main() keha lõpp.
kokkuvõte
- Virn on andmestruktuur, mis töötab LIFO (Last In first Out) tehnikal.
- Std::stack võimaldab üksusi lisada ja eemaldada ainult ühest otsast.
- Std::stack klass on konteineri adapter, mis sisaldab sarnast andmetüüpi üksusi.
- Virna saab luua erinevatest jadakonteineritest.
- Kui te konteinerit ei esita, kasutatakse vaikimisi kustutamise konteinerit.
- Funktsioon push() on üksuste sisestamiseks virna.
- Funktsioon pop() on toimingu ülemise elemendi eemaldamiseks.
- Funktsioon tühi() on selleks, et kontrollida, kas virn on tühi või mitte.