STL stack poskytuje funkcionalitu datové struktury zásobníku v C++.

Následuje datová struktura zásobníku LIFO (Last In First Out) zásada. To znamená, že prvek přidaný jako poslední bude odstraněn jako první.

Struktura dat zásobníku

Chcete-li se dozvědět více o hromádkách, navštivte náš tutoriál na Stack Data Structure.

Vytvořit Stack

Abychom vytvořili zásobník v C++, musíme nejprve zahrnout stack hlavičkový soubor.

#include <stack>

Jakmile tento soubor naimportujeme, můžeme vytvořit stack pomocí následující syntaxe:

stack<type> st;

Tady, type označuje datový typ tento příkaz tento příkaz chceme uložit do zásobníku. Například

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

Pří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

Ve výše uvedeném příkladu jsme vytvořili stack řetězců pojmenovaných jazyky .

Zde jsme použili push pro přidání prvků do zásobníku. Pak jsme použili top pro zobrazení horního prvku.

Dozvíme se více o push a top později v tutoriálu.

Metody zásobníku

V C++, stack třída poskytuje různé metody pro provádění různých operací na zásobníku.

Úkon Popis
push přidá prvek do zásobníku
pop odebere prvek ze zásobníku
top vrátí prvek v horní části zásobníku
size vrátí počet prvků v zásobníku
empty se vrací true pokud je zásobník prázdný

Přidejte prvek do zásobníku

Používáme push pro přidání prvku do zásobníku. například

#include <iostream>

#include <stack>

using namespace std;

int main {

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

// vloží prvky do zásobníku 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, 

Ve výše uvedeném příkladu jsme vytvořili zásobník řetězců nazývaných barvy. Pak jsme použili push pro přidání prvků do zásobníku.

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

Místo přímého tisku obsahu stohu jsme použili while smyčka a různé metody zásobníku.

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

Abychom vytiskli všechny prvky zásobníku, vytiskneme jeho top element a pak pop(vyjměte) jej uvnitř smyčky. Tento proces opakovaně pokračuje, dokud není zásobník prázdný.

Budeme se učit o pop, top a empty v následujících sekcích.

Všimněte si také, že jsme prvky vložili v tomto pořadí: {„Red“, „Orange“}.

Ale při tisku prvků dostaneme {„Orange“, „Red“}.

Je to proto, že zásobník je datová struktura LIFO, což znamená, že prvek vložený jako poslední je načten jako první.

Poznámka: Na rozdíl od vektorů nebo jiných kontejnerů nemůžeme použít rozsah for smyčka pro iteraci přes zásobník. Je to proto, že zásobník STL je STL kontejnerový adaptér, který poskytuje omezující přístup, aby se choval jako standardní datová struktura zásobníku.

Odebrat prvky z Stack

Prvek ze zásobníku můžeme odstranit pomocí pop. napří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);

// odstraní “Blue” jak bylo vloženo jako poslední barvy.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,

Ve výše uvedeném příkladu jsme použili pop k odstranění prvku ze zásobníku.

Zpočátku je obsah zásobníku {„Blue“, „Orange“, „Red“}.

Pak jsme použili pop k odstranění prvku.

// removes top element
colors.pop 

Tím se odstraní prvek v horní části stack tj. prvek vložený jako poslední, což je „Blue“.

Tím se stává konečný stack {„Orange“, „Red“}.

Přístup k prvkům z Stack

K prvku v horní části zásobníku přistupujeme pomocí top. napří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

Ve výše uvedeném příkladu jsme vytvořili hromadu řetězců nazvaných barvy a přidali následující prvky: „Red“, „Orange“ a „Blue“.

Pak jsme použili top pro přístup k hornímu prvku:

string top = colors.top; 

Tady, „Blue“ byl vložen jako poslední, tak je top element.

Získejte velikost zásobníku

Používáme size získat počet prvků v stack. napří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ískat velikost zásobníku int size = prime_nums.size;

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

  return 0;
}

Output

Size of the stack: 3

Ve výše uvedeném příkladu jsme vytvořili zásobník celých čísel s názvem prime_nums a přidali jsme k němu tři prvky.

Pak jsme použili size zjistit počet prvků v zásobníku:

prime_nums.size;

Protože jsme do zásobníku přidali 3 prvky, prime_nums.size se vrací 3.

Zkontrolujte, zda je zásobník prázdný

Používáme empty pro kontrolu, zda je zásobník prázdný. Tato metoda vrací:

  • 1(true)– pokud je zásobník prázdný
  • 0(false)– pokud není zásobník prázdný

například

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

int main {

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

// kontrola, zda je zásobník prázdný 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? ";

// kontrola, zda je zásobník prázdný if (nums.empty) {

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

  return 0;
}

Output

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

Ve výše uvedeném příkladu jsme použili empty určit, zda stack je prázdný,

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

Zpočátku v zásobníku nejsou žádné prvky. Tak nums.empty se vrací true.

Poté jsme přidali prvky do zásobníku.

Opět používáme nums.empty zjistit, zda je zásobník prázdný. Tentokrát se to vrací false.

Výše jsou informace o Jak používat zásobník C++ Chcete-li se dozvědět více o zásobníkech [Detailed Guide]. Pokud máte nějaké dotazy, zeptejte se fixsy.org v komentáři níže. Rád vám pomohu.