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 }
复制代码

 

posted on   廿陆  阅读(42)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示