函数模板知识点
template < class T>
题目:利于函数模板知识,对数组进行排序。
答案:
代码示例:
#include<iostream>
using namespace std;
template<class T>
void myswap(T &a,T &b){
T temp;
temp=a;
a=b;
b=temp;
}
template<class T>//鍑芥暟妯℃澘澹版槑
void mySort(T x[],int len){
for(int i=0;i<len;i++){
int max=i;
for(int j=i+1;j<len;j++){
if(x[max]<x[j]){
max=j;
}
}
if(max!=i){
swap(x[i],x[max]);
}
}
}
template<class T>
void myprint(T x[],int n){
for(int m=0;m<n;m++){
cout<<x[m]<<endl;
}
}
void test01(){
char s[]="badfe";
int a[]={0,6,8,7,1,4,3,5,2,9};
int sum=sizeof(s)/sizeof(char);
mySort<char>(s,sum);
myprint(s,sum);
int intsum=sizeof(a)/sizeof(int);
mySort<int>(a,intsum);
myprint(a,intsum);
}
int main(){
test01();
}
一、普通函数与函数模板的区别
1.普通函数调用可以发生隐式类型转换
(什么是隐式类型转换?隐式类型转换是指在函数调用时char类型数据可以自动变为int型数据)
2.函数模板,自动类型推导不可以发生隐式类型转换,用显示指定类型可以发生。
实例:
#include<iostream>
using namespace std;
template <class T>
T mySum(T a,T b){
return a+b;
}
void test01(){
int a=10;
char b='c';
cout<<mySum<int>(a,b)<<endl; //自己可以修改此行的代码进行调试
}
int main(){
test01();
}
二、
1.普通函数和函数模板共存时,优先调用普通函数,
(如果函数模板比普通函数更好处理,优先调用函数模板)
2.可以区别参数,可以用函数模板显示指定类型,强制调用函数模板
3.函数模板和普通函数一样可发生函数重载。
三、模板存在局限性,有些数据类型并不适用,而是需要更具体化的实现