c++ 基础知识-模板1
1.c++ 基础知识-模板-函数模板
总结
函数模板利用关键字template
使用函数模板有两种方式;自动类型推导,显示指定类型
模板的目的是为了提高复用性,将类型参数化
#include <iostream>
using namespace std;
//利用模板提供通用的交换函数
template <typename T>//typname可以用class替换
void mySwap(T& a,T& b)
{
T temp = a;
a = b;
b = temp;
}
void test_fun()
{
int a = 22;
int b = 33;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
//1.自动类型转换
mySwap(a,b);
cout<<"mySwap(a,b)"<<endl;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
//2.显示指定类型
mySwap<int>(a,b);
cout<<"mySwap<int>(a,b)"<<endl;
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
//输出
//a = 22
//b = 33
//mySwap(a,b)
//a = 33
//b = 22
//mySwap<int>(a,b)
//a = 22
//b = 33
}
int main()
{
test_fun();
return 0;
}
2.c++ 基础知识-模板-函数模板实例
#include <iostream>
using namespace std;
//利用模板提供通用的交换函数
template <typename T>//typname可以用class替换
void mySwap(T& a,T& b)
{
T temp = a;
a = b;
b = temp;
}
template <typename T>//typname可以用class替换
void swapSort(T *arr,int length)
{
//int length = sizeof(arr)/sizeof(arr[0]);
for (int i = 0; i < length; i++)
{
T max = i;
for (int j = i+1;j<length;j++)
{
if (arr[max] < arr[j])
{
max =j;
}
}
if (max != i)
{
//交换max和i
mySwap(arr[max],arr[i]);
}
}
}
template <typename T>//typname可以用class替换
void outPut(T *arr,int length)
{
//int length = sizeof(arr)/sizeof(arr[0]);
for (int i = 0; i < length; i++)
{
cout<<arr[i]<<endl;
}
}
void test_fun()
{
//int a = 1;
//string b = "jkjkjk";
//mySwap(a,b);//error C2782: “void mySwap(T &,T &)”: 模板 参数“T”不明确
int int_arr[] = {1,3,2,4,7,6,9,5,8,0};
int length = sizeof(int_arr)/sizeof(int_arr[0]);
swapSort(int_arr,length);
outPut(int_arr,length);
//char char_arr[] = {'s','a','e',};
//int length = sizeof(char_arr)/sizeof(char_arr[0]);
//swapSort(char_arr,length);
//outPut(char_arr,length);
}
int main()
{
test_fun();
return 0;
}
3.c++ 基础知识-模板-普通函数与模板函数异同
普通函数与模板函数区别
普通函数可以自动类型转换(隐式类型转换)
函数模板调用时,利用自动类型推导,不会发生隐式类型转换
利用显示指定类型,可以发生隐式类型转换
#include <iostream>
using namespace std;
//普通函数
int add_1(int a,int b)
{
return a + b;
}
//模板函数
template<class T>
T add_2(T a,T b)
{
return a + b;
}
void test_fun()
{
int a = 9;
//int b = 10;
char c = 'd';
//普通函数
cout<< add_1(a,c)<<endl;
//隐式调用转换
//cout<< add_2(a,c)<<endl;//error C2782: “T add_2(T &,T &)”: 模板 参数“T”不明确
//显式调用
cout<< add_2<int>(a,c)<<endl;
}
int main()
{
test_fun();
return 0;
}