Kontener typu stack - stos

Stronę tą wyświetlono już: 88 razy

Wstęp

Klasa stack jest implementacją stosu, czyli takiego kontenera, który umożliwia dynamiczne dodawanie elementów w taki sposób, że aby uzyskać dostęp do kolejnych elementów stosu konieczne jest zdjęcie ostatnio dodanego elementu. Stos jest kontenerem z dostępem typu LIFO, czyli ostatni wchodzi pierwszy wychodzi. Przykładową implementację stosu stworzyłem na stronie Programowanie → Podstawy C++ → Szablony klas na przykładzie własnej kolejki LIFO (stosu) przy okazji omawiania zagadnień związanych z szablonami klas.

Dostęp do klasy stack uzyskuje się poprzez załączenie pliku nagłówkowego stack.

Konstruktory klasy stack

Dwa podstawowe konstruktory to oczywiście konstruktor bezparametrowy i kopiujący:

Listing 1
  1. std::stack<int> stack1; // bezparametrowy konstruktor
  2. std::stack<int> stack2(stack1); // kopiujący konstruktor

Istnieje też wersja konstruktora bezparametrowego używającego kontenera innego typu, oto przykład:

Listing 2
  1. std::stack<int, std::vector<int>> stack;

Ostatni wariant umożliwia skopiowanie wartości z innego kontenera przechowującego ten sam typ danych:

Listing 3
  1. std::vector<int> v(3, 10); // tworzę wektor z trzema elementami zawierającymi liczbę dziesięć
  2. std::stack<int, std::vector<int>> stack(v); // ten konstruktor kopiuje elementy z wektora v

Metody klasy stack

Oto metody klasy stack:

  • empty - zwraca true, gdy stos nie zawiera elementów;
  • size - zwraca liczbę elementów znajdujących się na stosie;
  • top - umożliwia operację na ostatnio dodanym elemencie stosu
    Listing 4
    1. std::stack<int> stack;
    2. stack.push(10);
    3. stack.push(20);
    4. stack.top() += 20;
    5. std::cout << "Now last element of stack is equal: " << stack.top() << std::endl;
  • push - dodaje element do stosu
  • pop - zdejmuje ostatnio dodany element stosu

Jak widać, aby uzyskać dostęp do kolejnych elementów stosu konieczne jest zdjęcie ostatnio dodanego elementu.

Strony powiązane
strony powiązane
  1. www.cplusplus.com/reference/stack/stack/ - opis klasy stack [en]

Komentarze