#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함수를 짜고 싶은데 마음대로 안됨요... 주석 못단건 죄송.......
부탁드립니다.
ㄴ 엉엉 ㅜㅜ
스택 나서스 q스택 베이가 q스택 쌓듯이 만들면 됨
3줄 요약 좀 보기 귀찮
그래서 어디가 오륜대??