#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>

using namespace std;

int min(int a, int b)
{
 if(a > b)
  return b;
 else
  return a;
}

 

template <class T>
class Stack
{
private:
 int top;

 int capacity;

public:
 T *stack;
 
 Stack(int stackCapacity = 10);

 bool IsEmpty() const;

 T& Top() const;

 void Push(const T& item);

 void Pop();

 void PrintStack();

 int size;
};

template <class T>
Stack<T>::Stack(int stackCapacity):capacity(stackCapacity)
{
 if(capacity < 1)
  throw "Stack capacity must be > 0";
 stack = new T[capacity];
 top = -1;
 size = 0;
}

template <class T>
inline bool Stack<T>::IsEmpty() const {return top == -1;}

template <class T>
inline T& Stack<T>::Top() const
{
 if(IsEmpty())throw "Stack is Empty";
 return stack[top];
}

template <class T>
void Stack<T>::Push(const T& x)
{
 if(top == capacity - 1)
 {
  ChangeSizeID(stack, capacity, 2 * capacity);
  capacity *= 2;
 }
 stack[++top] = x;
 size++;
}

template <class T>
void Stack<T>::Pop()
{
 if(IsEmpty()) throw "Stack is empty. Cannot delete.";
 stack[top--].~T();
 size--;
}

template <class T>

void ChangeSizeID(T *&a, const int oldSize, const int newSize)
{
 if(newSize < 0) throw "New length must be >= 0";
 T* temp = new T[newSize];
 int number = min(oldSize, newSize);
 copy(a, a + number, temp);
 delete []a;
 a = temp;
}

 

void main()
{
 Stack<int> st;
 st.Push(5);
 st.Push(10);
 st.Push(1110);
 st.Pop();
 st.PrintStack();
}


배열로 짠 스택인데 PrintStack함수를 짜고 싶은데 마음대로 안됨요... 주석 못단건 죄송.......

부탁드립니다.