#ifndef _MYUNTIL_
#define _MYUNTIL_
template<class T>
void ChangeSize1D(T* &a, const int oldSize, const int mewSize);
template<class T>
void ChangeSize1D(T* &a, const int oldSize, const int mewSize)
{
if(newSize < 0) throw "New length must be >= 0";
T* temp = new T[newSize]; // 用new操作符动态的创建一个新的数组,将原来的数据一个一个拷贝到新的数组里边,
int number = min(oldSize,newSize);
std::copy(a,a+number,temp);
delete[] a;
a=temp;
}
#endif _MYUNTIL_
#ifndef _MYSTACK_
#define _MYSTACK_
template<class T>
class MyStack
{
public:
MyStack(int stackCapacity=10);
~MyStack();
bool IsEmpty() const;
T& Top() const; // 返回堆栈顶的元素并不删除,
void Push(const T& item); // 放一个元素到堆栈中,
void Pop(); // pop是把堆栈中栈顶的数据删除,
private:
T *stack; // 这是一个指针,
int top; // top记录栈顶在哪里,
int capacity; // 容量数组有多大,
};
template<class T>
void MyStack<T>::Pop()
{
if(IsEmpty()) throw "Stack is empty. Connot delete,";
stack[top--].~T(); // 这个是重点,
}
template<class T>
inline bool MyStack<T>::IsEmpty() const // inline这是一种类元的表示,
{
return top == -1;
}
template<class T>
inline T& MyStack<T>::Top() const
{
if(IsEmpty()) throw "Stack is empty";
return stack[top];
}
template<class T>
MyStack<T>::MyStack(int stackCapacity):capacity(stackCapacity)
{
if(capacity < 1) throw "stack capacity must be > 0";
stack = new T[capacity];
top = -1;
}
template<class T>
MyStack<T>::~MyStack()
{
delete [] stack;
}
template<class T>
void MyStack<T>::Push(const T& item)
{
stack[++top] = item;
}
#endif _MYSTACK_
#include <iostream>
#include "MyUtil.h"
#include "MyStack.h"
#include <string>
using namespace std;
class Dog
{
};
int main()
{
MyStack<Dog> dogstack;
MyStack<string> stringstack;
MyStack<int> st;
st.Push(6);
st.Push(3);
st.Push(12);
st.Push(31);
cout << st.Top() << endl;
st.Pop();
cout << st.Top() << endl;
cout<< "xiao cui" << endl;
return 0;
}