1.什么时候使用函数模板和;类模板:函数的业务逻辑一样,但函数类型参数不一样,为了方便程序员的编程。
template T相当于一个类型。template是告诉c++编译器,我要开始泛型编程了,不要随便报错。
函数模板的调用:
1.显示类型调用
myswap(x,y); <>表示要参数化的数据类型
2.自动类型推导(不常用,不好用)直接调用函数
例:myswap (x,y);
如下为函数模板的示例。
#include <iostream>
template<typename T>
myswap(T &a,T&b)
{
T c;
c=a;
a=b;
b=c;
}
int main(int argc, char** argv) {
int a=1;
int b=2;
char c='i';
char d='j';
myswap<int>(a,b);
myswap<char>(c,d);
printf("a=%d,b=%d\n",a,b);
printf("c=%c,d=%c\n",c,d);
return 0;
}
运行结果:
#include <iostream>
#include <cstring>
using namespace std;
//对字符数组 int数组进行排序
template <typename T,typename T2 >
int mySort(T *array, T2 size)
{
T2 i, j ;
T tmp;
if (array == NULL)
{
return -1;
}
//选择
for (i=0; i<size; i++)
{
for (j=i+1; j<size; j++)
{
if (array[i] < array[j])
{
tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
return 0;
}
template <typename T, typename T2>
int myPrint(T *array, T2 size)
{
T2 i = 0;
for (i=0; i<size; i++)
{
cout << array[i] << " ";
}
return 0;
}
int main(int argc, char** argv)
{
// int类型
// {
// int myarray[] = {11, 33,44, 33,22, 2, 3, 6, 9};
//
// int size = sizeof(myarray)/sizeof(*myarray);
// mySort<int, int> (myarray, size);
//
// printf("排序之后\n");
// myPrint(myarray, size);
//
// }
//char 类型
{
char buf[] = "aff32ff2232fffffdssss";
int len = strlen(buf);
mySort<char, int>(buf, len);
myPrint<char , int>(buf, len);
}
return 0;
}