#include <iostream>
using namespace std;
//函数模板
template<class T>
void swap1(T &a, T &b)
{
T temp = a;
a = b;
b = temp;
}
//函数模板
template <typename T>
T const& Max (T const& a, T const& b)
{
return a < b ? b:a;
}
//类模板
template <class T>
class Stack {
public:
Stack();
~Stack();
int push(T t);
T pop();
bool isEmpty();
bool isFull();
private:
T *m_pT;
int m_maxSize;
int m_size;
};
template <class T> Stack<T>::Stack()
{
m_maxSize = 100;
m_size = 0;
m_pT = new T[m_maxSize];
}
template <class T> Stack<T>::~Stack()
{
delete [] m_pT ;
}
template <class T> int Stack<T>::push(T t)
{
if (m_size >= m_maxSize)
{
return -1;
}
m_size++;
m_pT[m_size - 1] = t;
return 0;
}
template <class T> T Stack<T>::pop()
{
T t = m_pT[m_size - 1];
m_size--;
return t;
}
template <class T> bool Stack<T>::isEmpty()
{
return m_size == 0;
}
template <class T> bool Stack<T>::isFull()
{
return m_size == m_maxSize;
}
int main()
{
int a,b;
a = 5;
b = 10;
swap(a,b);
cout << "a="<<a<<" b="<<b<<endl;
char firstChar='A', secondChar='B';
swap1<char>(firstChar, secondChar);//char也可以不写,由后面firstChar, secondChar参数编译器可以自动推出是char
cout << "firstChar="<<firstChar<<" secondChar="<<secondChar<<endl;
cout << "Max(a, b): " << Max<int>(a, b) << endl;
Stack<int> intStack;
for (int i = 0;i<10;i++)
{
intStack.push(i);
}
while (!intStack.isEmpty())
{
printf("num:%d \n", intStack.pop());
}
return 0;
}