码迷,mamicode.com
首页 > 其他好文 > 详细

第56课 函数模板的概念和意义

时间:2018-09-04 23:34:17      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:names   out   space   amp   main   str   print   nbsp   小结   

发散性问题:

C++有几种交换变量的方法?

定义宏代码块与函数:

实验:

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 #define SWAP(t, a, b)     7 do                        8 {                         9     t c = a;             10     a = b;               11     b = c;               12 }while(0)
13 
14 
15 void Swap(int& a, int& b)
16 {
17     int c = a;
18     a = b;
19     b = c;
20 }
21 
22 void Swap(double& a, double& b)
23 {
24     double c = a;
25     a = b;
26     b = c;
27 }
28 
29 void Swap(string& a, string& b)
30 {
31     string c = a;
32     a = b;
33     b = c;
34 }
35 
36 int main()
37 {
38     int a = 0;
39     int b = 1;
40     
41     Swap(a, b);
42     
43     cout << "a = " << a << endl;
44     cout << "b = " << b << endl;
45     
46     double m = 2;
47     double n = 3;
48     
49     Swap(m, n);
50     
51     cout << "m = " << m << endl;
52     cout << "n = " << n << endl;
53     
54     string d = "Delphi";
55     string t = "Tang";
56     
57     Swap(d, t);
58     
59     cout << "d = " << d << endl;
60     cout << "t = " << t << endl;
61     
62     return 0;
63 }

结果如下:

技术分享图片

每当我们需要交换两个变量的值时,就需要重载一个函数,这是重复性的劳动。

 

优缺点分析:

技术分享图片

我们需要找到一种方法可以集合宏和函数的优点。

泛型编程:

技术分享图片

 

函数模板:

技术分享图片

 

 

技术分享图片

 

 

技术分享图片

 

实验:

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 template < typename T >
 7 void Swap(T& a, T& b)
 8 {
 9     T c = a;
10     a = b;
11     b = c;
12 }
13 
14 template < typename T >
15 void Sort(T a[], int len)
16 {
17     for(int i=0; i<len; i++)
18     {
19         for(int j=i; j<len; j++)
20         {
21             if( a[i] > a[j] )
22             {
23                 Swap(a[i], a[j]);
24             }
25         }
26     }
27 }
28 
29 template < typename T >
30 void Println(T a[], int len)
31 {
32     for(int i=0; i<len; i++)
33     {
34         cout << a[i] << ", ";
35     }
36     
37     cout << endl;
38 }
39 
40 int main()
41 {
42     int a[5] = {5, 3, 2, 4, 1};
43     
44     Println(a, 5);
45     Sort(a, 5);
46     Println(a, 5);
47     
48     string s[5] = {"Java", "C++", "Pascal", "Ruby", "Basic"};
49     
50     Println(s, 5);
51     Sort(s, 5);
52     Println(s, 5);
53     
54     return 0;
55 }

运行结果如下:

技术分享图片

 

 

 小结:

技术分享图片

 

第56课 函数模板的概念和意义

标签:names   out   space   amp   main   str   print   nbsp   小结   

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9588903.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!