Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3806 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:

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

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

std::stack<int, std::vector<int>> stack;

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

std::vector<int> v(3, 10); // tworzę wektor z trzema elementami zawierającymi liczbę dziesięć 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
    std::stack<int> stack; stack.push(10); stack.push(20); stack.top() += 20; 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]
Layout wykonany przez autora strony, wszelkie prawa zastrzeżone. Jakiekolwiek użycie części lub całości grafik znajdujących się na tej stronie bez pisemnej zgody jej autora surowo zabronione.