#include <iostream>
template <typename T>
class Stack {
private:
static const int MAX_SIZE = 1000;
T data[MAX_SIZE];
int top;
public:
Stack() : top(-1) {}
bool isEmpty() const {
return top == -1;
}
bool isFull() const {
return top == MAX_SIZE - 1;
}
void push(const T& value) {
if (isFull()) {
std::cerr << "Error: Stack overflow\n";
return;
}
data[++top] = value;
}
T pop() {
if (isEmpty()) {
std::cerr << "Error: Stack underflow\n";
return T(); // Default value for the type T
}
return data[top--];
}
T peek() const {
if (isEmpty()) {
std::cerr << "Error: Stack is empty\n";
return T(); // Default value for the type T
}
return data[top];
}
int size() const {
return top + 1;
}
};
int main() {
Stack<int> myStack;
myStack.push(5);
myStack.push(10);
myStack.push(15);
std::cout << "Stack size: " << myStack.size() << std::endl;
std::cout << "Top element: " << myStack.peek() << std::endl;
std::cout << "Popping elements: ";
while (!myStack.isEmpty()) {
std::cout << myStack.pop() << " ";
}
return 0;
}