resize() : 사용할 수 있는 스택의 Capacity를 늘려주는 함수
push() : 스택에 저장 하는 기능
pop() : 스택에서 값이 빠져나오는 기능
top() : 스택의 맨 윗값을 출력하는 기능
capacity() : 스택의 용량을 출력하는 기능
size() : 스택의 크기를 출력하는 기능
empty() : 스택이 비었는지, 안 비었는지 유무를 출력하는 기능
#include <iostream>
using namespace std;
template<typename T> class mStack {
private:
T* arr;
unsigned int m_capacity;
unsigned int m_size;
public:
// 생성자
mStack() {
m_capacity = 3; // default capacity 10;
m_size = 0;
arr = new T[m_capacity];
}
// 소멸자
~mStack() {
if (arr != NULL) delete[] arr;
}
void resize() {
m_capacity *= 2;
T* tmp = new T[m_size];
for (int i = 0; i < m_size; i++) tmp[i] = arr[i];
arr = new T[m_capacity];
for (int i = 0; i < m_size; i++) arr[i] = tmp[i];
delete[] tmp;
tmp = nullptr;
}
void push(T data) {
if (m_size >= m_capacity) {
resize();
}
arr[m_size++] = data;
}
T pop() {
if (m_size)
return arr[--m_size];
else
throw out_of_range("Stack is Empty");
}
T top() {
if (m_size)
return arr[m_size - 1];
else
throw out_of_range("Stack is Empty");
}
T capacity() {
return m_capacity;
}
T size() {
return m_size;
}
bool empty() {
return m_size == 0 ? true : false;
}
};