STL stack biedt de functionaliteit van een stapelgegevensstructuur in C++.

De stapelgegevensstructuur volgt: LIFO (Last In First Out) beginsel. Dat wil zeggen dat het laatst toegevoegde element als eerste wordt verwijderd.

Gegevensstructuur stapelen

Ga voor meer informatie over stapels naar onze tutorial op: Stack Data Structure.

Creëren Stack

Om een ​​stapel in C++ te maken, moeten we eerst opnemen: stack header-bestand.

#include <stack>

Zodra we dit bestand hebben geïmporteerd, kunnen we een stack met behulp van de volgende syntaxis:

stack<type> st;

Hier, type geeft het gegevenstype aan dit commando dit commando willen we opslaan in de stapel. bijvoorbeeld,

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

Voorbeeld: 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

In het bovenstaande voorbeeld hebben we gemaakt stack van strings met de naam talen .

Hier hebben we gebruikt push om elementen aan de stapel toe te voegen. We hebben toen gebruikt top om het bovenste element weer te geven.

We zullen meer leren over push en top verderop in de les.

Stapelmethoden

In C++, stack class biedt verschillende methoden om verschillende bewerkingen op een stapel uit te voeren.

Operatie Beschrijving
push voegt een element toe aan de stapel
pop verwijdert een element uit de stapel
top geeft het element bovenaan de stapel terug
size geeft het aantal elementen in de stapel terug
empty geeft terug true als de stapel leeg is

Element toevoegen aan de stapel

We gebruiken push om een ​​element aan een stapel toe te voegen. op bijvoorbeeld

#include <iostream>

#include <stack>

using namespace std;

int main {

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

// duw elementen in de stapel 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, 

In het bovenstaande voorbeeld hebben we een stapel strings gemaakt die kleuren worden genoemd. Dan hebben we gebruikt push om elementen aan de stapel toe te voegen.

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

In plaats van de inhoud van de stapel direct af te drukken, hebben we gebruikt while lus en verschillende stapelmethoden.

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

Om alle elementen van de stapel af te drukken, printen we zijn top element en dan pop(verwijder) het in de lus. Dit proces gaat herhaaldelijk door totdat de stapel leeg is.

We zullen leren over pop, top en empty in de komende secties.

Merk ook op dat we de elementen in deze volgorde hebben ingevoegd: {“Red”, “Orange”}.

Maar bij het afdrukken van de elementen krijgen we {“Orange”, “Red”}.

Dit komt omdat de stapel een LIFO-gegevensstructuur is, wat betekent dat het laatst ingevoegde element het eerst wordt opgehaald.

Opmerking: in tegenstelling tot vectoren of andere containers, kunnen we geen ranged . gebruiken for loop om door een stapel heen te lopen. Dit komt omdat de STL-stack een STL-containeradapter is, die restrictieve toegang biedt, zodat deze zich gedraagt ​​als een standaard-stackgegevensstructuur.

Elementen verwijderen uit Stack

We kunnen een element van de stapel verwijderen met pop. op bijvoorbeeld

#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);

// verwijdert “Blue” zoals het laatst is ingevoegd 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,

In het bovenstaande voorbeeld hebben we gebruikt pop om een ​​element van de stapel te verwijderen.

Aanvankelijk is de inhoud van de stapel: {“Blue”, “Orange”, “Red”}.

Dan hebben we gebruikt pop om het element te verwijderen.

// removes top element
colors.pop 

Dit verwijdert het element aan de bovenkant van stack dat wil zeggen het element dat als laatste is ingevoegd, dat is “Blue”.

Daarom wordt de laatste stapel {“Orange”, “Red”}.

Toegang tot elementen van Stack

We hebben toegang tot het element bovenaan de stapel met top. op bijvoorbeeld

#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

In het bovenstaande voorbeeld hebben we een stapel strings met de naam kleuren gemaakt en de volgende elementen toegevoegd: “Red”, “Orange” en “Blue”.

We hebben toen gebruikt top om toegang te krijgen tot het bovenste element:

string top = colors.top; 

Hier, “Blue” is als laatste ingevoegd, dus dat is het ook top element.

Verkrijg de grootte van de stapel

We gebruiken size om het aantal elementen binnen te krijgen stack. op bijvoorbeeld

#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);

// krijg de grootte van de stapel int size = prime_nums.size;

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

  return 0;
}

Output

Size of the stack: 3

In het bovenstaande voorbeeld hebben we een stapel gehele getallen gemaakt met de naam prime_nums en er drie elementen aan toegevoegd.

Dan hebben we gebruikt size om het aantal elementen in de stapel te vinden:

prime_nums.size;

Omdat we 3 elementen aan de stapel hebben toegevoegd, prime_nums.size geeft terug 3.

Controleer of de stapel leeg is

We gebruiken empty om te controleren of de stapel leeg is. Deze methode retourneert:

  • 1(true)– als de stapel leeg is
  • 0(false)– als de stapel niet leeg is

op bijvoorbeeld

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

int main {

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

// controleer of de stapel leeg is 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? ";

// controleer of de stapel leeg is if (nums.empty) {

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

  return 0;
}

Output

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

In het bovenstaande voorbeeld hebben we gebruikt empty om te bepalen of stack is leeg,

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

Aanvankelijk bevat de stapel geen elementen. Dus nums.empty geeft terug true.

We hebben vervolgens elementen aan de stapel toegevoegd.

Nogmaals, we gebruiken nums.empty om te bepalen of de stapel leeg is. Deze keer keert het terug false.

Hierboven staat informatie over C++ Stack gebruiken Voor meer informatie over stacks [Detailed Guide]. Als u vragen heeft, stel ze gerust fixsy.org in een reactie hieronder. Ik help je graag verder.