第八章实验

实验目的和要求

1、能够使用C++模板机制定义重载函数。

2、能够实例化及使用模板函数。

3、能够实例化和使用模板类。

4、应用标准C++模板库(STL)通用算法和函数对象实现查找与排序。

 

实验内容

1.分析并调试下列程序,了解函数模板的使用。 

1. #include<iostream>    

2. using namespace std;    

3. template <class T>    

4. T max(T a,T b)    

5. {    

6.     return a>b?a:b;    

7. }    

8. int max(int a,int b)    

9. {    

10.     return a>b?a:b;    

11. }    

12. int main()    

13. {    

14.     cout<<"max(6,5)is"<<max(6,5)<<endl;    

15.     cout<<"max('6','5')is"<<max(6,5)<<endl;    

16.     return 0;    

17. }    

 

1)写出运行结果,分析编译系统工作过程。

 

2)如果定义函数重载,代码如下:

1. int max(int a,int b){return a>b?a:b;}    

2. float max(float a,float b){return a>b?a:b;}     

如果程序中有max('6','5');调用时会出现什么结果?为什么?上机调试并分析原因。

2、分析并调试 下列程序,了解特定模板函数的作用。   

1. #include<iostream>    

2. using namespace std;    

3. template<typename T>    

4. T max(T a,T b)    

5. {    

6.    return a>b?a:b;    

7. }    

8. char *max(char *a,char *b)    

9. {    

10.     return strcmp(a,b)>0?a:b;    

11. }    

12. int main()    

13. {    

14.     cout<<"max(6,5)is"<<max(6,5)<<endl;    

15.     cout<<"max(\"China\",\"Japan\")is"<<max("China","Japan")<<endl;    

16.     return 0;    

17. }    

 

1)写出运行结果。

2)说明特定模板函数的作用。

 

3、声明一个类模板,利用它实现10个整数、浮点数和字符的排序。   

1. #include<iostream>    

2. using namespace std;    

3. template <class T>    

4. class MySort    

5. {    

6. public:    

7.     MySort(T _stores[10])    

8.     {    

9.         stores = _stores;    

10.     }    

11.     void DoSort(bool up = true)    

12.     {    

13.         for(int i = 0; i < 10; i++)    

14.         {    

15.             for(int j = i+1; j < 10; j++)    

16.             {    

17.                 if(up)//升序    

18.                 {    

19.                     if(stores[i] > stores[j])    

20.                     {    

21.                         T temp = stores[i];    

22.                         stores[i] = stores[j];    

23.                         stores[j] = temp;    

24.                     }    

25.                 }    

26.                 else//降序    

27.                 {    

28.                     if(stores[i] < stores[j])    

29.                     {    

30.                         T temp = stores[i];    

31.                         stores[i] = stores[j];    

32.                         stores[j] = temp;    

33.                     }    

34.                 }    

35.             }    

36.         }    

37.     }    

38. private:    

39.     T *stores;    

40. };    

41.     

42. int main()    

43. {    

44.     //int    

45.     int nums[10];    

46.    cout<<"输入10个整数:"<<nums[10]<<endl;    

47.     for(int i = 0;i<10;i++)    

48.        cin>> nums[i];    

49.     MySort<int> mySort(nums);    

50.     mySort.DoSort(true);//升序    

51.     for(int i = 0; i < 10; i++)    

52.         cout<<nums[i]<<endl;    

53.     

54.     //float    

55.     float nums1[10];    

56.     cout<<"输入10个浮点数:"<<nums1[10]<<endl;    

57.     for(int i = 0; i < 10; i++)    

58.        cin>>nums1[i];    

59.     MySort<float> mySort1(nums1);    

60.     mySort1.DoSort(false);    

61.     for(int i = 0; i < 10; i++)    

62.          cout<<nums1[i]<<endl;    

63.     

64.     // char    

65.     char chars[10];    

66.     cout<<"输入10个字符:"<<chars[10]<<endl;    

67.     for(int i = 0; i < 10; i++)    

68.        cin>>chars[i];    

69.     MySort<char> mySort2(chars);    

70.     mySort2.DoSort();    

71.     for(int i = 0; i < 10; i++)    

72.         cout<<chars[i]<<endl;    

73.     

74.     return 0;    

75. }    

 

运行结果如下:

 

4、声明一个整型数组,使用C++标准模板库(STL)中的查找算法find()进行数据的查找,然后应用排序算法sort()对数据进行升序和降序排序。  

1. #include<iostream>    

2. #include<vector>    

3. #include<algorithm>    

4. using namespace std;    

5.     

6. bool  largeThan(int x,int y)    

7. {    

8.     return x>y;    

9. }    

10. int main()    

11. {    

12.     int a[7]={4,8,3,9,5,1,7};    

13.     size_t arrSize=7;    

14.     int searchValue=5;    

15.     vector<int> vec(a,a+arrSize);    

16.     vector<int>::iterator it=find(vec.begin(),vec.end(),searchValue);    

17.     if(it==vec.end())    

18.         cout<<"not found"<<endl;    

19.     else    

20.         cout<<searchValue<<"'s index is "<<(it-vec.begin())<<endl;    

21.     //升序    

22.     sort(vec.begin(),vec.end());    

23.     for(vector<int>::iterator it=vec.begin();it!=vec.end();it++)    

24.         cout<<*it<<ends;    

25.     cout<<endl;    

26.     

27.     //降序;    

28.     sort(vec.begin(),vec.end(),largeThan);    

29.     for(vector<int>::iterator it=vec.begin();it!=vec.end();it++)    

30.         cout<<*it<<ends;    

31.     cout<<endl;    

32. }    

 

运行结果如下:

 

分析与讨论

1、结合实验中第1题和第2题,说明编译器匹配函数的过程。

2、 结合实验中第3题和第4题,比较利用自定义类模板排序和使用C++标准模板库排序的过程。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值