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