Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

Stapel in C++ STL met voorbeeld

Wat is std::stack?

Een stack is een datastructuur die werkt op basis van de LIFO-techniek (Last In First Out). Met de std::stack kunnen elementen slechts aan één kant worden toegevoegd en verwijderd.

De std::stack-klasse is een containeradapter. Containerobjecten bevatten gegevens van een vergelijkbaar gegevenstype. U kunt een stapel maken van verschillende volgordecontainers. Als er geen container is opgegeven, wordt standaard de deque container gebruikt. Containeradapters ondersteunen geen iterators, dus het kan niet worden gebruikt om gegevens te manipuleren.

In deze C++ tutorial leer je

  • Wat is std::stack?
  • Stapelsyntaxis
  • Typen leden
  • Bewerkingen in stapel
  • Stack-implementatie
  • push() en pop()
  • empty(), size(), top()
  • emplace() en swap()
  • Stapel in STL

Stapelsyntaxis

Om een ​​stapel te maken, moeten we het headerbestand in onze code opnemen. Vervolgens gebruiken we deze syntaxis om de std::stack:

. te definiëren
template <class Type, class Container = deque<Type> > class stack;
  • Type – is het Type element in de std::stack. Het kan elk geldig C++-type zijn of zelfs een door de gebruiker gedefinieerd type.
  • Container – is het Type van het onderliggende containerobject.

Lidtypes

Dit zijn de soorten stapelleden:

  • value_type- De eerste sjabloonparameter, T. Deze geeft de elementtypen aan.
  • container_type- De tweede sjabloonparameter, Container. Het geeft het onderliggende containertype aan.
  • size_type- Unsigned integraal type.

Bewerkingen in stapel

Een C++-stack ondersteunt de volgende basisbewerkingen:

  • push – Het voegt/duwt een item in de stapel.
  • pop - Het verwijdert/popt een item van de stapel.
  • peek – Geeft het bovenste item van de stapel terug zonder het te verwijderen.
  • isFull – Controleert of een stapel vol is.
  • isEmpty – Controleert of een stapel leeg is.

Stack-implementatie

Stap 1) We hebben in eerste instantie een lege stapel. De bovenkant van een lege stapel is ingesteld op -1.

Stap 2) Vervolgens hebben we het element 5 in de stapel geduwd. De bovenkant van de stapel wijst naar het element 5.

Stap 3) Vervolgens hebben we het element 50 in de stapel geduwd. De bovenkant van de stapel verschuift en wijst naar element 50.

Stap 4) We hebben vervolgens een pop-bewerking uitgevoerd, waarbij het bovenste element van de stapel is verwijderd. Het element 50 wordt van de stapel gesprongen. De bovenkant van de stapel wijst nu naar het element 5.

push() en pop()

De stack::push() functies voegt een nieuw item toe aan de bovenkant van de stapel. De stapelgrootte wordt na het inbrengen met een 1 verhoogd. De functie heeft deze syntaxis:

stack.push(value)

De waarde is het item dat in de stapel moet worden ingevoegd.

De functie stack::pop() verwijdert het bovenste element van de stapel. Dit is het nieuwste item van de stapel. De stapelgrootte wordt na het verwijderen met 1 verkleind. Hier is de syntaxis van de functie:

stack.pop()

De functie heeft geen parameters.

Voorbeeld 1:

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

Uitvoer:

Hier is een screenshot van de code:

Code uitleg:

  1. Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
  2. Neem het stackheaderbestand op in onze code om de functies ervan te gebruiken.
  3. Neem de std-naamruimte op in onze code om de klassen te gebruiken zonder deze aan te roepen.
  4. Roep de functie main() aan. De programmalogica moet binnen deze functie worden toegevoegd.
  5. Maak een stapel st om gehele waarden op te slaan.
  6. Gebruik de functie push() om de waarde 10 in de stapel in te voegen.
  7. Gebruik de functie push() om de waarde 20 in de stapel in te voegen.
  8. Gebruik de functie push() om de waarde 30 in de stapel in te voegen.
  9. Gebruik de functie push() om de waarde 40 in de stapel in te voegen.
  10. Gebruik de functie pop() om het bovenste element van de stapel te verwijderen, dat wil zeggen 40. Het bovenste element wordt nu 30.
  11. Gebruik de functie pop() om het bovenste element van de stapel te verwijderen, dat wil zeggen 30. Het bovenste element wordt nu 20.
  12. Gebruik een while-lus en empty()-functie om te controleren of de stapel NIET leeg is. De ! is de NOT-operator.
  13. De huidige inhoud van de stapel afdrukken op de console.
  14. Roep de functie pop() op de stapel aan.
  15. Einde van de body van de while-lus.
  16. Einde van de hoofdtekst van de functie ().

empty(), size(), top()

Stacks hebben ingebouwde functies die je kunt gebruiken om met de stack en zijn waarden te spelen. Deze omvatten:

  • empty()- controleert of een stapel leeg is of niet.
  • size()- retourneert de grootte van de stapel, dat wil zeggen het aantal elementen in een stapel.
  • top()- geeft toegang tot het stack-element bovenaan.

Voorbeeld 2:

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

Uitvoer:

Hier is een screenshot van de code:

Code uitleg:

  1. Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
  2. Neem het stack-headerbestand op in onze code om de functies ervan te gebruiken.
  3. Neem de std-naamruimte op in ons programma om de klassen te gebruiken zonder deze aan te roepen.
  4. Maak de functie createStack die we kunnen gebruiken om de stapel-mystack te maken. De stapel bevat een reeks gehele getallen.
  5. Het begin van de hoofdtekst van de createStack-functie.
  6. Maak een instantie van het mystack-gegevenstype en geef deze de naam ms.
  7. Gebruik de while-lus en de functie empty() om te controleren of de stapel leeg is.
  8. Het begin van de body van de while-lus.
  9. Gebruik de functie top() die bovenaan de stapel is opgeslagen. Het \t-teken maakt een nieuw tabblad aan.
  10. Gebruik de functie pop() om het element bovenaan de stapel te verwijderen.
  11. Einde van de body van de while-lus.
  12. Druk een lege regel af op de console.
  13. Einde van de hoofdtekst van de createStack-functie.
  14. Roep de functie main() aan. De programmalogica moet worden toegevoegd aan de hoofdtekst van de functie main().
  15. Het begin van de hoofdtekst van de functie main().
  16. Maak een stapelobject st.
  17. Gebruik de functie push() om het element 32 in de stapel te plaatsen.
  18. Gebruik de functie push() om het element 21 in de stapel te plaatsen.
  19. Gebruik de functie push() om het element 39 in de stapel te plaatsen.
  20. Gebruik de functie push() om het element 89 in de stapel te plaatsen.
  21. Gebruik de functie push() om element 25 in de stapel te plaatsen.
  22. Druk wat tekst af op de console.
  23. Roep de functie createStack aan om de bovenstaande invoegbewerkingen in de stapel uit te voeren.
  24. Druk het formaat van de stapel op de console af naast andere tekst.
  25. Druk het element boven aan de stapel op de console af.
  26. Druk wat tekst af op de console.
  27. Verwijder het element bovenaan de stapel. Het zal dan de resterende elementen in de stapel teruggeven.
  28. Roep de functie createStack aan om de bovenstaande bewerkingen uit te voeren.
  29. Het programma moet waarde retourneren na succesvolle voltooiing.
  30. Einde van de hoofdtekst van de functie main().

emplace() en swap()

Dit zijn andere ingebouwde stapelfuncties:

  • emplace()- constructs voegt vervolgens een nieuw element toe aan de bovenkant van de stapel.
  • swap()- wisselt stapelinhoud uit met de inhoud van een andere stapel.

Voorbeeld 3:

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

Uitvoer:

Hier is een screenshot van de code:

Code uitleg:

  1. Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
  2. Neem het stackheaderbestand op in onze code om de functies ervan te gebruiken.
  3. Neem het cstdlib-headerbestand op in onze code om de functies ervan te gebruiken.
  4. Neem de std-naamruimte op in onze code om de klassen te gebruiken zonder deze aan te roepen.
  5. Roep de functie main() aan. De programmalogica wordt toegevoegd aan de hoofdtekst van deze functie.
  6. Declareer een stapel met de naam st1 om gehele waarden op te slaan.
  7. Declareer een stapel met de naam st2 om gehele waarden op te slaan.
  8. Gebruik de functie emplace() om het gehele getal 12 in te voegen in de stapel met de naam st1.
  9. Gebruik de functie emplace() om het gehele getal 19 in te voegen in de stapel met de naam st1.
  10. Gebruik de functie emplace() om het gehele getal 20 in te voegen in de stapel met de naam st2.
  11. Gebruik de functie emplace() om het gehele getal 23 in te voegen in de stapel met de naam st2.
  12. Gebruik de functie swap() om de inhoud van de twee stapels, st1 en st2, om te wisselen. De inhoud van de stapel st1 moet worden verplaatst naar de stapel st2. De inhoud van de stapel st2 moet worden verplaatst naar de stapel st1.
  13. Druk wat tekst af op de console.
  14. Gebruik het while-statement en de functie empty() om te controleren of de stack st1 niet leeg is.
  15. Druk de inhoud van de stapel st1 af op de console. De ” ” voegt ruimte toe tussen de stapelelementen wanneer ze op de console worden afgedrukt.
  16. Voer de functie pop() uit op de stack st1 om het bovenste element te verwijderen.
  17. Einde van de body van het while-statement.
  18. Druk wat tekst af op de console. De endl is een C++-sleutelwoord voor eindregel. Het verplaatst de muiscursor naar de volgende regel om vanaf daar te beginnen met afdrukken.
  19. Gebruik het while-statement en de functie empty() om te controleren of de stack st2 niet leeg is.
  20. Druk de inhoud van de stapel st2 af op de console. De ” ” voegt ruimte toe tussen de stapelelementen wanneer ze op de console worden afgedrukt.
  21. Voer de functie pop() uit op de stack st2 om het bovenste element te verwijderen.
  22. Einde van de body van het while-statement.
  23. Einde van de hoofdtekst van de functie main().

Stapel in STL

De STL (Standard Template Library) wordt geleverd met sjabloonklassen die algemene C++-gegevensstructuren bieden. Daarom kan een stapel ook in STL worden geïmplementeerd. We nemen deze bibliotheek gewoon op in onze code en gebruiken deze om een ​​stapel te definiëren.

stack<T> st; 

De bovenstaande syntaxis declareert een stack st voor elementen van het datatype T.

Voorbeeld 3:

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

Uitvoer:

Hier is een screenshot van de code:

Code uitleg:

  1. Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
  2. Neem het stackheaderbestand op in onze code om de functies ervan te gebruiken.
  3. Neem het cstdlib-headerbestand op in onze code om de functies ervan te gebruiken.
  4. Neem de std-naamruimte op in onze code om de klassen te gebruiken zonder deze aan te roepen.
  5. Roep de functie main() aan. De programmalogica moet worden toegevoegd aan de hoofdtekst van deze functie.
  6. Declareer een stack st om integer data op te slaan.
  7. Voeg het element 12 toe aan de stapel.
  8. Voeg het element 19 toe aan de stapel.
  9. Voeg het element 20 toe aan de stapel.
  10. Druk het element boven aan de stapel op de console af.
  11. Druk het formaat van de stapel af op de console.
  12. Einde van de hoofdtekst van de functie main().

Samenvatting:

  • Een stapel is een gegevensstructuur die werkt op basis van de LIFO-techniek (Last In First Out).
  • Met de std::stack kunnen alleen items aan één kant worden toegevoegd en verwijderd.
  • De klasse std::stack is een containeradapter die items van een vergelijkbaar gegevenstype bevat.
  • Een stapel kan worden gemaakt van verschillende sequentiecontainers.
  • Als u geen container opgeeft, wordt standaard de deque-container gebruikt.
  • De functie push() is voor het invoegen van items in de stapel.
  • De pop()-functie is voor het verwijderen van het bovenste item uit de stap.
  • De functie empty() is om te controleren of een stapel leeg is of niet.

C Taal

  1. Operators in C++ met voorbeeld:wat is, typen en programma's
  2. C++ do...while-lus met voorbeelden
  3. C++ Switch Case Statement met VOORBEELD
  4. C++ Dynamische toewijzing van arrays met voorbeeld
  5. C++-aanwijzers met voorbeelden
  6. Overbelasting van C++-operator met voorbeelden
  7. C++-structuur met voorbeeld
  8. Kaart in C++ Standard Template Library (STL) met afdrukvoorbeeld
  9. std::lijst in C++ met Voorbeeld
  10. C++-functies met programmavoorbeelden
  11. Verschil tussen structuur en klasse:uitgelegd met C++-voorbeeld