Шаблон класса Stack
позволяет создавать стеки с элементами любого типа. Основные свойства стека:
- Последний пришел — первый ушел (LIFO).
- Операции
push
иpop
выполняются за постоянное время. - Внутреннее хранение может быть реализовано на основе массива или связного списка.
Пример кода
#include <iostream>
#include <vector>
template<typename T>
class Stack {
private:
std::vector<T> elements; // Внутреннее хранение на основе std::vector
public:
// Добавление элемента в стек
void push(const T& value) {
elements.push_back(value);
}
// Удаление верхнего элемента из стека
void pop() {
if (!elements.empty()) {
elements.pop_back();
} else {
throw std::out_of_range("Stack<>::pop(): empty stack");
}
}
// Получение верхнего элемента без удаления
T top() const {
if (!elements.empty()) {
return elements.back();
} else {
throw std::out_of_range("Stack<>::top(): empty stack");
}
}
// Проверка, пуст ли стек
bool isEmpty() const {
return elements.empty();
}
// Получение размера стека
size_t size() const {
return elements.size();
}
};
int main() {
Stack<int> intStack; // Стек для целых чисел
intStack.push(1);
intStack.push(2);
intStack.push(3);
std::cout << "Top element: " << intStack.top() << std::endl; // Вывод: 3
intStack.pop();
std::cout << "Top element after pop: " << intStack.top() << std::endl; // Вывод: 2
std::cout << "Stack size: " << intStack.size() << std::endl; // Вывод: 2
return 0;
}