create stack data structure

#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;
}