STL stack tarjoaa pinotietorakenteen toiminnallisuuden C++:ssa.

Pinon datarakenne on seuraava LIFO (Last In First Out) periaate. Eli viimeksi lisätty elementti poistetaan ensin.

Pinotietorakenne

Saat lisätietoja pinoista käymällä opetusohjelmassamme Stack Data Structure.

Luoda Stack

Luodaksemme pinon C++:ssa, meidän on ensin sisällytettävä stack otsikkotiedosto.

#include <stack>

Kun tuomme tämän tiedoston, voimme luoda stack käyttämällä seuraavaa syntaksia:

stack<type> st;

Tässä, type osoittaa tietotyypin tämä komento tämä komento, jonka haluamme tallentaa pinoon. Esimerkiksi

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

Esimerkki: C++ STL-pino

#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

Yllä olevassa esimerkissä olemme luoneet stack kielillä nimetyistä merkkijonoista .

Täällä olemme käyttäneet push lisätäksesi elementtejä pinoon. Olemme sitten käyttäneet top näyttääksesi ylimmän elementin.

Opimme lisää push ja top myöhemmin opetusohjelmassa.

Pinomenetelmät

C++:ssa, stack luokka tarjoaa erilaisia ​​menetelmiä erilaisten toimintojen suorittamiseen pinossa.

Operaatio Kuvaus
push lisää elementin pinoon
pop poistaa elementin pinosta
top palauttaa pinon yläosassa olevan elementin
size palauttaa pinon elementtien määrän
empty palaa true jos pino on tyhjä

Lisää elementti pinoon

Käytämme push lisätäksesi elementin pinoon. Esimerkiksi

#include <iostream>

#include <stack>

using namespace std;

int main {

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

// työnnä elementtejä pinoon 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, 

Yllä olevassa esimerkissä olemme luoneet pinon merkkijonoja, joita kutsutaan väreiksi. Sitten olemme käyttäneet push lisätäksesi elementtejä pinoon.

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

Sen sijaan, että olisimme tulostaneet pinon sisällön suoraan, olemme käyttäneet while silmukka ja erilaiset pinomenetelmät.

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

Jos haluat tulostaa pinon kaikki elementit, tulostamme sen top element ja sitten pop(poista) se silmukan sisällä. Tätä prosessia jatketaan toistuvasti, kunnes pino on tyhjä.

Me opimme siitä pop, top ja empty tulevissa osioissa.

Huomaa myös, että olemme lisänneet elementit tässä järjestyksessä: {”Red”, ”Orange”}.

Mutta kun tulostamme elementtejä, saamme {”Orange”, ”Red”}.

Tämä johtuu siitä, että pino on LIFO-tietorakenne, mikä tarkoittaa, että viimeisenä lisätty elementti haetaan ensin.

Huomautus: Toisin kuin vektoreissa tai muissa säilöissä, emme voi käyttää vaihteluväliä for silmukka iteroida pinon läpi. Tämä johtuu siitä, että STL-pino on STL-säilösovitin, joka tarjoaa rajoittavan pääsyn saadakseen sen toimimaan tavallisen pinon tietorakenteen tavoin.

Poista elementit kohteesta Stack

Voimme poistaa elementin pinosta käyttämällä pop. Esimerkiksi

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

// poistaa ”Blue” kuten se lisättiin viimeksi colours.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,

Yllä olevassa esimerkissä olemme käyttäneet pop poistaaksesi elementin pinosta.

Aluksi pinon sisältö on {”Blue”, ”Orange”, ”Red”}.

Sitten olemme käyttäneet pop elementin poistamiseksi.

// removes top element
colors.pop 

Tämä poistaa elementin yläosassa stack eli viimeksi lisätty elementti, joka on ”Blue”.

Näin ollen viimeinen pino tulee {”Orange”, ”Red”}.

Pääsy elementteihin osoitteesta Stack

Pääsemme pinon yläosassa olevaan elementtiin käyttämällä top. Esimerkiksi

#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

Yllä olevassa esimerkissä olemme luoneet pinon merkkijonoja nimeltä värit ja lisänneet seuraavat elementit: ”Red”, ”Orange” ja ”Blue”.

Olemme sitten käyttäneet top päästäksesi ylimpään elementtiin:

string top = colors.top; 

Tässä, ”Blue” lisättiin viimeksi, niin se on top element.

Hanki pinon koko

Käytämme size saadaksesi elementtien määrän sisään stack. Esimerkiksi

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

// saada pinon koko int size = prime_nums.size;

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

  return 0;
}

Output

Size of the stack: 3

Yllä olevassa esimerkissä olemme luoneet kokonaislukupinon alkunumerot ja lisänneet siihen kolme elementtiä.

Sitten olemme käyttäneet size pinon elementtien lukumäärän selvittäminen:

prime_nums.size;

Koska olemme lisänneet pinoon 3 elementtiä, prime_nums.size palaa 3.

Tarkista, onko pino tyhjä

Käytämme empty tarkistaaksesi, onko pino tyhjä. Tämä menetelmä palauttaa:

  • 1(true)– jos pino on tyhjä
  • 0(false)– jos pino ei ole tyhjä

Esimerkiksi

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

int main {

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

// Tarkista, onko pino tyhjä 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? ";

// Tarkista, onko pino tyhjä if (nums.empty) {

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

  return 0;
}

Output

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

Yllä olevassa esimerkissä olemme käyttäneet empty määrittääkseen jos stack on tyhjä,

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

Aluksi pinossa ei ole elementtejä. Niin nums.empty palaa true.

Olemme sitten lisänneet elementtejä pinoon.

Jälleen käytämme nums.empty määrittääksesi onko pino tyhjä. Tällä kertaa se palaa false.

Yllä tietoa aiheesta C++-pinon käyttäminen Saat lisätietoja pinoista [Detailed Guide]. Jos sinulla on kysyttävää, kysy fixsy.org alla olevassa kommentissa. Olen iloinen voidessani auttaa sinua.