Stivați în C ++ STL cu Exemplu

Cuprins:

Anonim

Ce este std :: stack?

O stivă este o structură de date care funcționează pe baza tehnicii LIFO (Last In First Out). Std :: stack permite ca elementele să fie adăugate și eliminate doar dintr-un capăt.

Clasa std :: stack este un adaptor de container. Obiectele container conțin date de un tip de date similar. Puteți crea un teanc din diferite containere de secvență. Dacă nu este furnizat niciun container, deque containe va fi utilizat în mod implicit. Adaptoarele pentru containere nu acceptă iteratoarele, deci nu pot fi utilizate pentru manipularea datelor.

În acest tutorial C ++, veți învăța

  • Ce este std :: stack?
  • Sintaxa stivei
  • Tipuri de membri
  • Operațiuni în stivă
  • Implementarea stivei
  • push () și pop ()
  • gol (), dimensiune (), sus ()
  • emplace () și swap ()
  • Stivați în STL

Sintaxa stivei

Pentru a crea o stivă, trebuie să includem fișierul antet în codul nostru. Apoi folosim această sintaxă pentru a defini std :: stack:

template  > class stack;
  • Tipul - este Tipul de element conținut în std :: stack. Poate fi orice tip C ++ valid sau chiar un tip definit de utilizator.
  • Container - este tipul obiectului container subiacent.

Tipuri de membri

Iată tipurile de membri ai stivei:

  • value_type- Primul parametru șablon, T. Denotă tipurile de elemente.
  • container_type- Al doilea parametru șablon, Container. Denotă tipul de container subiacent.
  • size_type- Tip integral nesemnat.

Operațiuni în stivă

O stivă C ++ acceptă următoarele operațiuni de bază:

  • push - adaugă / împinge un articol în stivă.
  • pop - Elimină / scoate un articol din stivă.
  • peek - Returnează elementul de sus al stivei fără a-l scoate.
  • isFull - Verifică dacă o stivă este plină.
  • isEmpty - Verifică dacă un teanc este gol.

Implementarea stivei

Pasul 1) Avem inițial o stivă goală. Partea de sus a unei stive goale este setată la -1.

Pasul 2) Apoi, am împins elementul 5 în stivă. Partea de sus a stivei va indica elementul 5.

Pasul 3) Apoi, am împins elementul 50 în stivă. Partea de sus a stivei se deplasează și indică elementul 50.

Pasul 4) Am efectuat apoi o operație pop, eliminând elementul de sus din stivă. Elementul 50 este scos din stivă. Partea de sus a stivei indică acum elementul 5.

push () și pop ()

Funcțiile stack :: push () adaugă element nou în partea de sus a stack-ului. Dimensiunea stivei este mărită cu 1 după inserare. Funcția ia această sintaxă:

stack.push(value)

Valoarea este elementul de inserat în stivă.

Funcția stack :: pop () elimină elementul de sus al stack-ului. Acesta este cel mai nou articol din stivă. Dimensiunea stivei este redusă cu 1 după îndepărtare. Iată sintaxa funcției:

stack.pop()

Funcția nu ia parametri.

Exemplul 1:

#include #include using namespace std;int main() {stack 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();}}

Ieșire:

Iată o captură de ecran a codului:

Explicatie cod:

  1. Includeți fișierul antet iostream în codul nostru pentru a-i folosi funcțiile.
  2. Includeți fișierul antet stivă în codul nostru pentru a-i folosi funcțiile.
  3. Includeți spațiul de nume std în codul nostru pentru a utiliza clasele sale fără a-l apela.
  4. Apelați funcția main (). Logica programului ar trebui adăugată în cadrul acestei funcții.
  5. Creați o stivă pentru a stoca valorile întregi.
  6. Utilizați funcția push () pentru a introduce valoarea 10 în stivă.
  7. Utilizați funcția push () pentru a introduce valoarea 20 în stivă.
  8. Utilizați funcția push () pentru a introduce valoarea 30 în stivă.
  9. Utilizați funcția push () pentru a introduce valoarea 40 în stivă.
  10. Utilizați funcția pop () pentru a elimina elementul de sus din stivă, adică 40. Elementul de sus devine acum 30.
  11. Utilizați funcția pop () pentru a elimina elementul de sus din stivă, adică 30. Elementul de sus devine acum 20.
  12. Utilizați o funcție de buclă while și empty () pentru a verifica dacă stiva NU este goală. The! este operatorul NU.
  13. Imprimarea conținutului curent al stivei pe consolă.
  14. Apelați funcția pop () din stivă.
  15. Sfârșitul corpului buclei while.
  16. Sfârșitul corpului funcției principale ().

gol (), dimensiune (), sus ()

Stivele au funcții încorporate pe care le puteți folosi pentru a juca cu stiva și valorile sale. Acestea includ:

  • empty () - verifică dacă o stivă este goală sau nu.
  • size () - returnează dimensiunea stivei, adică numărul de elemente dintr-o stivă.
  • top () - accesează elementul stivei din partea de sus.

Exemplul 2:

#include #include using namespace std;void createStack(stack  mystack){stack  ms = mystack;while (!ms.empty()){cout << '\t' << ms.top();ms.pop();}cout << '\n';}int main(){stack  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;}

Ieșire:

Iată o captură de ecran a codului:

Explicatie cod:

  1. Includeți fișierul antet iostream în codul nostru pentru a-i folosi funcțiile.
  2. Includeți fișierul antet stivă în codul nostru pentru a-i folosi funcțiile.
  3. Includeți spațiul de nume std în programul nostru pentru a utiliza clasele sale fără a-l apela.
  4. Creați funcția createStack pe care o putem folosi pentru a crea stiva mystack. Stiva va conține un set de numere întregi.
  5. Începutul corpului funcției createStack.
  6. Creați o instanță a tipului de date mystack și dați-i numele ms.
  7. Utilizați bucla while și funcția empty () pentru a verifica dacă stiva este goală.
  8. Începutul corpului buclei while.
  9. Utilizați funcția top () stocată în partea de sus a stivei. Caracterul \ t va crea o filă nouă.
  10. Utilizați funcția pop () pentru a șterge elementul din partea de sus a stivei.
  11. Sfârșitul corpului buclei while.
  12. Imprimați o linie goală pe consolă.
  13. Sfârșitul corpului funcției createStack.
  14. Apelați funcția main (). Logica programului trebuie adăugată în corpul funcției main ().
  15. Începutul corpului funcției main ().
  16. Creați un obiect st. St.
  17. Utilizați funcția push () pentru a introduce elementul 32 în stivă.
  18. Utilizați funcția push () pentru a introduce elementul 21 în stivă.
  19. Utilizați funcția push () pentru a introduce elementul 39 în stivă.
  20. Utilizați funcția push () pentru a introduce elementul 89 în stivă.
  21. Utilizați funcția push () pentru a introduce elementul 25 în stivă.
  22. Imprimați un text pe consolă.
  23. Apelați funcția createStack pentru a executa operațiunile de inserare de mai sus în stivă.
  24. Imprimați dimensiunea stivei pe consolă alături de alt text.
  25. Imprimați elementul din partea de sus a stivei de pe consolă.
  26. Imprimați un text pe consolă.
  27. Ștergeți elementul din partea de sus a stivei. Apoi va returna elementele rămase în stivă.
  28. Apelați funcția createStack pentru a executa operațiunile de mai sus.
  29. Programul trebuie să returneze valoarea la finalizarea cu succes.
  30. Sfârșitul corpului funcției main ().

emplace () și swap ()

Acestea sunt alte funcții de stivă încorporate:

  • emplace () - construiește apoi introduce element nou în partea de sus a stivei.
  • swap () - schimbă conținutul stivei cu conținutul altei stive.

Exemplul 3:

#include #include #include using namespace std;int main() {stack st1;stack 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();}}

Ieșire:

Iată o captură de ecran a codului:

Explicatie cod:

  1. Includeți fișierul antet iostream în codul nostru pentru a-i folosi funcțiile.
  2. Includeți fișierul antet stivă în codul nostru pentru a-i folosi funcțiile.
  3. Includeți fișierul antet cstdlib în codul nostru pentru a-i folosi funcțiile.
  4. Includeți spațiul de nume std în codul nostru pentru a utiliza clasele sale fără a-l apela.
  5. Apelați funcția main (). Logica programului va fi adăugată în corpul acestei funcții.
  6. Declarați o stivă numită st1 pentru a stoca valori întregi.
  7. Declarați o stivă numită st2 pentru a stoca valori întregi.
  8. Utilizați funcția emplace () pentru a insera numărul întreg 12 în stiva numită st1.
  9. Utilizați funcția emplace () pentru a insera numărul întreg 19 în stiva numită st1.
  10. Utilizați funcția emplace () pentru a insera numărul întreg 20 în stiva numită st2.
  11. Utilizați funcția emplace () pentru a insera numărul întreg 23 în stiva numită st2.
  12. Utilizați funcția swap () pentru a schimba conținutul celor două stive, st1 și st2. Conținutul stivei st1 trebuie mutat în stiva st2. Conținutul stivei st2 trebuie mutat în stiva st1.
  13. Imprimați un text pe consolă.
  14. Utilizați instrucțiunea while și funcția empty () pentru a verifica dacă stiva st1 nu este goală.
  15. Imprimați conținutul stivei st1 pe consolă. „” Adaugă spațiu între elementele stivei atunci când le tipăriți pe consolă.
  16. Executați funcția pop () pe stiva st1 pentru a elimina elementul de sus.
  17. Sfârșitul corpului declarației while.
  18. Imprimați un text pe consolă. Endl este un cuvânt cheie C ++ pentru linia finală. Mută ​​cursorul mouse-ului pe linia următoare pentru a începe tipărirea de acolo.
  19. Utilizați instrucțiunea while și funcția empty () pentru a verifica dacă stiva st2 nu este goală.
  20. Imprimați conținutul stivei st2 pe consolă. „” Adaugă spațiu între elementele stivei când le tipăriți pe consolă.
  21. Executați funcția pop () pe stiva st2 pentru a elimina elementul de sus.
  22. Sfârșitul corpului declarației while.
  23. Sfârșitul corpului funcției main ().

Stivați în STL

STL (Standard Template Library) vine cu clase de șabloane care oferă structuri de date comune C ++. Prin urmare, o stivă poate fi implementată și în STL. Pur și simplu includem această bibliotecă în codul nostru și o folosim pentru a defini o stivă.

stack st;

Sintaxa de mai sus declară o stivă a elementelor de tipul de date T.

Exemplul 3:

#include #include #include using namespace std;int main() {stack st;st.push(12);st.push(19);st.push(20);cout << st.top();cout << st.size();}

Ieșire:

Iată o captură de ecran a codului:

Explicatie cod:

  1. Includeți fișierul antet iostream în codul nostru pentru a-i folosi funcțiile.
  2. Includeți fișierul antet stivă în codul nostru pentru a-i folosi funcțiile.
  3. Includeți fișierul antet cstdlib în codul nostru pentru a-i folosi funcțiile.
  4. Includeți spațiul de nume std în codul nostru pentru a utiliza clasele sale fără a-l apela.
  5. Apelați funcția main (). Logica programului trebuie adăugată în corpul acestei funcții.
  6. Declarați o stivă pentru a stoca date întregi.
  7. Adăugați elementul 12 în teanc.
  8. Adăugați elementul 19 în teanc.
  9. Adăugați elementul 20 în teanc.
  10. Imprimați elementul din partea de sus a stivei de pe consolă.
  11. Imprimați dimensiunea stivei pe consolă.
  12. Sfârșitul corpului funcției main ().

Rezumat:

  • O stivă este o structură de date care funcționează pe baza tehnicii LIFO (Last In first Out).
  • Std :: stack permite doar adăugarea și eliminarea articolelor dintr-un capăt.
  • Clasa std :: stack este un adaptor de container, care conține elemente de un tip de date similar.
  • O stivă poate fi creată din diferite containere de secvență.
  • Dacă nu furnizați un container, containerul deque va fi utilizat în mod implicit.
  • Funcția push () este pentru inserarea articolelor în stivă.
  • Funcția pop () este pentru eliminarea elementului superior de la pas.
  • Funcția empty () este pentru a verifica dacă un stack este gol sau nu.