通过例子理解模板
一、求两者中较大数模板
template<typename T>
T maxValue(T value1,T value2)
{
if(value1>value2)
{
return value1;
}
else
{
return value2;
}
}
int main()
{
cout<<"Maximum between 1 and 3 is "<<maxValue(1, 3)<<endl;
cout<<"Maximum between 2.5 and 1.3 is "<<maxValue(2.5, 1.3)<<endl;
cout<<"Maximum between 'A' and 'M' is "<<maxValue('A', 'M')<<endl;
system("pause");
return 0;
}
二、一个通用排序模板
template<typename T>
void sort(T list[],int size)
{
for(int i=size-1;i>=1;--i)
{
T currentMax=list[0];
int currentIndex=0;
for(int j=1;j<=i;++j)
{
if(currentMax<list[j])
{
currentMax=list[j];
currentIndex=j;
}
}
if(currentIndex!=i)
{
list[currentIndex]=list[i];
list[i]=currentMax;
}
}
}
template <typename T>
void printArray(T list[],int size)
{
for(int i=0;i<size;++i)
{
cout<<list[i]<<" ";
}
cout<<endl;
}
int main()
{
int list1[]={3,2,5,7,1};
sort(list1,5);
printArray(list1,5);
char list2[]={'f','g','r','a','d'};
sort(list2,5);
printArray(list2,5);
string list3[]={"ABR","ABH","ABA"};
sort(list3,3);
printArray(list3,3);
system("pause");
return 0;
}
三、类模板
template<typename T>
class Stack
{
public:
Stack();
bool empty();
T peek();
void push(T value);
T pop();
int getSize();
private:
T *elements;
int size;
int capacity;
void ensureCapacity();
};
template<typename T>
Stack<T>::Stack():size(0),capacity(16)
{
elements=new T[capacity];
}
template<typename T>
bool Stack<T>::empty()
{
return (size==0);
}
template<typename T>
T Stack<T>::peek()
{
return elements[size-1];
}
template<typename T>
void Stack<T>::push(T value)
{
ensureCapacity();
elements[size++]=value;
}
template<typename T>
void Stack<T>::ensureCapacity()
{
if(size>=capacity)
{
T *old=elements;
capacity=2*size;
elements=new T[size*2];
for(int i=0;i<size;++i)
{
elements[i]=old[i];
}
delete old;
}
}
template<typename T>
T Stack<T>::pop()
{
return elements[--size];
}
template<typename T>
int Stack<T>::getSize()
{
return size;
}
int main()
{
Stack<int> stack;
for(int i=0;i<10;i++)
{
stack.push(i);
}
while(!stack.empty())
{
cout<<stack.pop()<<" ";
}
cout<<endl;
system("pause");
return 0;
}