一、为什么使用模板
为了不重复造轮子,使用模板
冒泡排序,如果要实现int类型的如下
void Sort(int* arr,int nLength)
{
int i;
int k;
for(i=0;i<nLength-1;i++)
{
for(k=0;k<nLength-1-i;k++)
{
if(arr[k]>arr[k+1])
{
int temp = arr[k];
arr[k] = arr[k+1];
arr[k+1] = temp;
}
}
}
}
int main()
{
int arr[] = {1,4,9,5,7,3,8};
Sort(arr,7);
}
如果char类型也要进行排序得把代码再写一遍,太麻烦,所以我们要用模板,编译器自动跟我们编写
二、模板的使用
template <class T>
void Sort(T* arr,int nLength)
{
int i;
int k;
for(i=0;i<nLength-1;i++)
{
for(k=0;k<nLength-1-i;k++)
{
if(arr[k]>arr[k+1])
{
T temp = arr[k];
arr[k] = arr[k+1];
arr[k+1] = temp;
}
}
}
}
int main()
{
int arr[] = {1,4,9,5,7,3,8};
Sort(arr,7);
}
三、通用行模板
class Base
{
private:
int x;
int y;
public:
Base(int x,int y)
{
this->x= x;
this->y= y;
}
//运算符重载:给运算符对应一个具体的函数
bool operator>(Base& base)
{
return this -> x > base.x && this -> y > base.y;
}
};
template <class T>
void Sort(T* arr,int nLength)
{
int i;
int k;
for(i=0;i<nLength-1;i++)
{
for(k=0;k<nLength-1-i;k++)
{
if(arr[k]>arr[k+1])
{
T temp = arr[k];
arr[k] = arr[k+1];
arr[k+1] = temp;
}
}
}
}
int main(int argc, char* argv[])
{
Base b1(1,1) , b2(3,3) , b3(2,2) , b4(5,5) , b5(4,4);
Base arr3[] = {b1,b2,b3,b4,b5};
Sort(arr3,5);
return 0;
}