STL stack poskytuje funkčnosť zásobníkovej dátovej štruktúry v C++.

Nasleduje dátová štruktúra zásobníka LIFO (Last In First Out) princíp. To znamená, že prvok pridaný ako posledný bude odstránený ako prvý.

Stack Data Structure

Ak sa chcete dozvedieť viac o zásobníkoch, navštívte náš návod na Stack Data Structure.

Vytvorte Stack

Aby sme vytvorili zásobník v C++, musíme najprv zahrnúť stack hlavičkový súbor.

#include <stack>

Po importovaní tohto súboru môžeme vytvoriť stack pomocou nasledujúcej syntaxe:

stack<type> st;

Tu, type označuje typ údajov tento príkaz tento príkaz chceme uložiť do zásobníka. Napríklad

// create a stack of integers
 stack<int> integer_stack; 
// create a stack of strings
stack<string> string_stack;

Príklad: C++ STL Stack

#include <iostream>

#include <stack>

using namespace std;

int main {
    // create a stack of strings

stack<string> languages;

    
    // add element to the Stack
    languages.push("C++");
    languages.push("Java");
    languages.push("Python");
    
    // print top element
    cout << languages.top;

    return 0;
}

Output

Python

Vo vyššie uvedenom príklade sme vytvorili stack reťazcov pomenovaných jazykov .

Tu sme použili push na pridanie prvkov do zásobníka. Potom sme použili top na zobrazenie horného prvku.

Dozvieme sa viac o push a top neskôr v tutoriále.

Metódy zásobníka

V C++, stack poskytuje rôzne metódy na vykonávanie rôznych operácií so zásobníkom.

Prevádzka Popis
push pridá prvok do zásobníka
pop odstráni prvok zo zásobníka
top vráti prvok v hornej časti zásobníka
size vráti počet prvkov v zásobníku
empty sa vracia true ak je zásobník prázdny

Pridajte prvok do zásobníka

Používame push na pridanie prvku do zásobníka. Napríklad

#include <iostream>

#include <stack>

using namespace std;

int main {

  // create a stack of strings
  stack<string> colors;

// vložiť prvky do zásobníka colors.push(„Red“); colors.push(„Orange“);

  
  cout << "Stack: ";

  // print elements of stack
   while(!colors.empty) {
    cout << colors.top << ", ";
    colors.pop;
  }
 
  return 0;
}

Output

Stack: Orange, Red, 

Vo vyššie uvedenom príklade sme vytvorili hromadu reťazcov nazývaných farby. Potom sme použili push na pridanie prvkov do zásobníka.

colors.push("Red");
colors.push("Orange");

Namiesto priamej tlače obsahu stohu sme použili while slučka a rôzne metódy zásobníka.

while(!colors.empty) {
  cout << colors.top << ", ";
  colors.pop;
}

Aby sme vytlačili všetky prvky stohu, vytlačíme ich top element a potom pop(odstrániť) vo vnútri slučky. Tento proces pokračuje opakovane, kým sa zásobník nevyprázdni.

Dozvieme sa o pop, top a empty v nasledujúcich sekciách.

Všimnite si tiež, že prvky sme vložili v tomto poradí: {„Red“, „Orange“}.

Ale pri tlači prvkov dostaneme {„Orange“, „Red“}.

Je to preto, že zásobník je dátová štruktúra LIFO, čo znamená, že prvok vložený ako posledný sa získa ako prvý.

Poznámka: Na rozdiel od vektorov alebo iných kontajnerov nemôžeme použiť rozsah for slučku na iteráciu cez zásobník. Je to preto, že zásobník STL je STL kontajnerový adaptér, ktorý poskytuje reštriktívny prístup, aby sa správal ako štandardná dátová štruktúra zásobníka.

Odstrániť prvky z Stack

Prvok môžeme zo zásobníka odstrániť pomocou pop. Napríklad

#include <iostream>
#include <stack>
using namespace std;

// function prototype this command this command for display_stack utility
void display_stack(stack<string> st);

int main {

  // create a stack of strings
  stack<string> colors;

  // push elements into the stack
  colors.push("Red");
  colors.push("Orange");
  colors.push("Blue");
  
  cout << "Initial Stack: ";
  // print elements of stack
  display_stack(colors);

// odstráni “Blue” ako bolo vložené naposledy colors.pop;

  
  cout << "Final Stack: ";

  // print elements of stack
  display_stack(colors);
  
  return 0;
}

// utility function to display stack elements
void display_stack(stack<string> st) {

  while(!st.empty) {
    cout << st.top << ", ";
    st.pop;
  }

  cout << endl;
}

Output

Initial Stack: Blue, Orange, Red, 
Final Stack: Orange, Red,

Vo vyššie uvedenom príklade sme použili pop na odstránenie prvku zo zásobníka.

Spočiatku je obsah zásobníka {„Blue“, „Orange“, „Red“}.

Potom sme použili pop na odstránenie prvku.

// removes top element
colors.pop 

Tým sa odstráni prvok v hornej časti stack tj prvok vložený ako posledný, čo je „Blue“.

Tým sa stáva konečný stack {„Orange“, „Red“}.

Prístup k prvkom z Stack

K prvku v hornej časti zásobníka pristupujeme pomocou top. Napríklad

#include <iostream>
#include <stack>
using namespace std;

int main {

  // create a stack of strings
  stack<string> colors;

  // push element into the stack
  colors.push("Red");
  colors.push("Orange");
  colors.push("Blue");
  
  // get top element

string top = colors.top;

  cout << "Top Element: " << top;
  
  return 0;
}

Output

Top Element: Blue

Vo vyššie uvedenom príklade sme vytvorili hromadu reťazcov nazývaných farby a pridali sme nasledujúce prvky: „Red“, „Orange“ a „Blue“.

Potom sme použili top pre prístup k hornému prvku:

string top = colors.top; 

Tu, „Blue“ bol vložený ako posledný, tak je top element.

Získajte veľkosť zásobníka

Používame size získať počet prvkov v stack. Napríklad

#include <iostream>
#include <stack>
using namespace std;

int main {

  // create a stack of int
  stack<int> prime_nums;

  // push elements into the stack
  prime_nums.push(2);
  prime_nums.push(3);
  prime_nums.push(5);

// získame veľkosť zásobníka int size = prime_nums.size;

  cout << "Size of the stack: " << size;

  return 0;
}

Output

Size of the stack: 3

Vo vyššie uvedenom príklade sme vytvorili zásobník celých čísel s názvom prime_nums a pridali sme k nemu tri prvky.

Potom sme použili size zistiť počet prvkov v zásobníku:

prime_nums.size;

Keďže sme do zásobníka pridali 3 prvky, prime_nums.size sa vracia 3.

Skontrolujte, či je zásobník prázdny

Používame empty aby ste skontrolovali, či je zásobník prázdny. Táto metóda vráti:

  • 1(true)– ak je zásobník prázdny
  • 0(false)– ak zásobník nie je prázdny

Napríklad

#include <iostream>
#include <stack>
using namespace std;

int main {

  // create a stack of double
  stack<double> nums;
  
  cout << "Is the stack empty? ";

// skontrolujte, či je zásobník prázdny if (nums.empty) {

    cout << "Yes" << endl;
  }
  else {
    cout << "No" << endl;
  }

  cout << "Pushing elements..." << endl;

  // push element into the stack
  nums.push(2.3);
  nums.push(9.7);
 
  cout << "Is the stack empty? ";

// skontrolujte, či je zásobník prázdny if (nums.empty) {

    cout << "Yes";
  }
  else {
    cout << "No";
  }

  return 0;
}

Output

Is the stack empty? Yes
Pushing elements...
Is the stack empty? No

Vo vyššie uvedenom príklade sme použili empty určiť, či stack je prázdny,

if(nums.empty) { // returns false
  cout << "Yes" << end;;
}
else {
  cout << "No" << endl; 
}

Na začiatku zásobník neobsahuje žiadne prvky. Takže nums.empty sa vracia true.

Potom sme pridali prvky do zásobníka.

Opäť používame nums.empty aby ste zistili, či je zásobník prázdny. Tentoraz sa to vracia false.

Vyššie sú informácie o Ako používať zásobník C++ Ak sa chcete dozvedieť viac o zásobníkoch [Detailed Guide]. Ak máte nejaké otázky, pýtajte sa fixsy.org v komentári nižšie. Rád vám pomôžem.