C++函数模板 选择排序案例
C++的两种模板机制:函数模板 类模板
函数模板:建立一个通用函数,其函数返回值类型和形参类型可以不具体制订,用一个 虚拟的类型 来代表
语法:
template<typename T>
函数声明或者定义:
解释:
template --- 声明创建模板
typename --- 表面其后面的符号是一种数据类型 可以用 class 代替
T --- 通用的数据类型 名称可以替换 通常为大写字母
1 #include <iostream> 2 using namespace std; 3 4 void IntSwap(int &a, int &b) 5 { 6 int temp = a; 7 a = b; 8 b = temp; 9 } 10 void DoubleSwap(double& a, double& b) 11 { 12 double temp = a; 13 a = b; 14 b = temp; 15 } 16 //函数模板 17 template<typename T>//声明一个模板,告知编译器后面代码紧跟着T为一个通用数据类型 18 void MySwap(T& a, T& b) 19 { 20 T temp = a; 21 a = b; 22 b = temp; 23 } 24 void test() 25 { 26 int a = 1; 27 int b = 2; 28 //IntSwap(a, b); 29 //利用函数模板交换 30 //1.自动类型推导 31 MySwap(a, b);// 自动推导a b 为整型数据 32 //2.显示指定类型 33 MySwap<int>(a, b);//告知模板类型为整型 34 cout << "a = " << a << endl; 35 cout << "b = " << b << endl; 36 }
总结:模板的目的是为了提高复用性,将类型参数化
注意事项:
1.自动类型推导,必须推导出一致的数据类型T,才可以正常使用
1 template<class T>// typename 可以替换为 class 2 //1.自动类型推导,必须推导出一致的数据类型T才可以使用 3 void MySwap(T& a, T& b) 4 { 5 T temp = a; 6 a = b; 7 b = temp; 8 } 9 void test() 10 { 11 int a = 10; 12 int b = 20; 13 char c = 'c'; 14 MySwap(a, b);//正确 15 //MySwap(a, c);//错误 推导不出一致的T的类型 16 }
2.模板必须要确定出T的数据类型,才可以使用
1 template<class T> 2 //2.模板必须要确定出T的数据类型 才可以使用 3 void func() 4 { 5 cout << "func调用" << endl; 6 } 7 void test() 8 { 9 func<int>();//由于此时调用无具体类型 因此需要强行给予一个类型即可 10 func<double>(); 11 }
模板选择排序:
1 //通用 对数组进行排序的函数 2 //选择排序 3 //交换函数模板 4 template<class T> 5 void mySwap(T& a, T& b) 6 { 7 T temp = a; 8 a = b; 9 b = temp; 10 } 11 template<class T> 12 void mySort(T arr[], int len) 13 { 14 for (int i = 0; i < len; i++) 15 { 16 int max = i;//认定最大值的下标 17 for (int j = i + 1; j < len; j++) 18 { 19 if (arr[max] < arr[j]) 20 { 21 max = j; 22 } 23 } 24 if (max != i) 25 { 26 mySwap(arr[max], arr[i]); 27 } 28 } 29 } 30 template<class T> 31 void printArray(T arr[], int len) 32 { 33 for (int i = 0; i < len; i++) 34 { 35 cout << arr[i] << " "; 36 } 37 cout << endl; 38 } 39 void test() 40 { 41 //测试字符数组 42 char charArr[] = "badcfe"; 43 int num = sizeof(charArr) / sizeof(char); 44 mySort(charArr, num); 45 printArray(charArr, num); 46 } 47 void test01() 48 { 49 //测试int数组 50 int intArr[] = { 7,5,1,3,9,2,4,6,8 }; 51 int num = sizeof(intArr) / sizeof(int); 52 mySort(intArr, num); 53 printArray(intArr, num); 54 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)