.模板(template)
C++另一种编程思想称为泛型编程,主要利用的技术就是模
//两个整形交换函数(普通)
void swapInt(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
//函数模板
template<typename T>// 声明一个模板,告诉编译器后面代码中紧跟着的T不要报错,T是一个通用数据类型
void mySwap(T &a,T &b)
{
T temp=a;
a=b;
b=temp;
}
void test1()
{
int a=10;
int b=20;
//利用模板实现交换
// 1.自动类型推导
mySwap(a,b);
//2.显示指定类型
mySwap<int>(a,b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
}
int main()
{
test1();
system("pause");
return 0;
}
@函数模板注意事项
typename可以替换成class
即template<class T>
//1.自动类型推导,必须推导出一致的数据类型T才可以使用
void test1()
{
int a=10;
int b=20;
char c='c';
//利用模板实现交换
// 1.自动类型推导
mySwap(a,b);
mySwap(a,c);
cout<<"a="<<a<<endl;//错误,数据不一致
cout<<"c="<<b<<endl;
}
//2.模板必须要确定出T的数据类型,才可以使用
template<class T>
void func()
{
cout<<"func的调用"<<endl;
}
void test02()
{
func();//无法确定T的数据类型;//func<int>();
}
// 实现通用,对数组进行排序的函数
//排序算法(从打到小,选择排序)
//交换函数模板
template<class T>
void mySwap(T&a,t&b)
{
T temp=a;
a=b;
b=temp;
}
template<class T>
void mySort(T arr[] ,int len)
{
for(int i=0;i<len ;i++)
{
int max=i;//认定最大值的下标
for(int j=i+1; j<len;j++)
{
//认定的最大值的下标比遍历出的数组要小
if (arr[max]<arr[j])
{
max=j;//更新最大值的下标
}
}
if(max!=i)
{
//交换max 和i元素
mySwap(arr[max] ,arr[i]);
}
}
}
2.普通函数与函数模板的区别(能不能发生隐式转换)
int myAdd1(int a,int b)
{
return a+b;
}
void test1()
{
int a=10;
int b=20;
char c='c'
cout<<myAdd1(a,c)<<endl;//c在这里隐式转换为了整形数字;(隐式转换)
}
int main()
{
test1();
return 0;
}
*//希望对大家有帮助