C++模板类练习题

题目说明:

1 编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和
2 具有对数组元素进行排序,倒置、查找和求和功能,
3 然后产生类型实参分别为int型和double型的两个模板类,
4 分别对整型数组与双精度数组完成所要求的操作

实现代码:

  1 /*
  2 编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和
  3 具有对数组元素进行排序,倒置、查找和求和功能,
  4 然后产生类型实参分别为int型和double型的两个模板类,
  5 分别对整型数组与双精度数组完成所要求的操作
  6 */
  7 
  8 // 以下代码 中标注了是用来debug的 都可以在debug完成后 将用来debug的代码删除 
  9 
 10 #include<iostream>
 11 using namespace std;
 12 const int SIZE=100;
 13 
 14 // Array -> 模板类(类模板)  
 15 template <class Type>
 16 class Array{
 17 private:
 18     int l, z;
 19     Type a[SIZE];
 20 public:
 21     Array(Type *b, int n)
 22     {
 23         int i;
 24         l = n;
 25         cout << "Array构造函数: " << endl;         // debug
 26         for(i=0;i<l;i++)
 27         {
 28             a[i] = b[i];
 29             // 接下来两个cout 是用来debug
 30             cout << a[i] << " "; 
 31         } 
 32         cout << endl;
 33     }
 34     
 35     /*
 36         void paixu();
 37         void daozhi();
 38         void chazhao(Type t);
 39         void add();     // 这个是正确的命名,但是求和还是用sum比较好 add表示加 
 40     */
 41     //以上函数的正确命名方法 
 42     void sort();
 43     void reverse();
 44     void find(Type t);
 45     void sum();    
 46         
 47 };
 48 
 49 template <class Type>
 50 void Array<Type>::sort(){ 
 51     Type c[SIZE];
 52     int i, j, m;
 53     for(i=0;i<l;i++)
 54     {
 55         c[i] = a[i];    
 56     }
 57         
 58     // 这下面的{}最好一个都不要省 
 59     // 一个都不省的话 首先方便后期添加代码 其次看起来舒服 
 60     // 排序 升序排序 
 61     for(j=0;j<l;j++)
 62     {
 63         for(j=i;j<l;j++)
 64         {
 65             if(c[i]>c[j])
 66             {
 67                 m = c[i];
 68                 c[i] = c[j];
 69                 c[j] = m;
 70             }
 71         }
 72     }
 73     
 74     // 输出排序后的数据 -> a b c 
 75     for(i=0;i<l;i++)
 76     {
 77         cout << c[i] << " ";    
 78     }
 79     cout << endl;
 80     
 81 }
 82         
 83 template <class Type>
 84 void Array<Type>::reverse(){
 85     int i;
 86     Type d[l];                // 声明数组 
 87     for(i=0;i<l;i++)
 88     {
 89         // int d[i] = a[l-1-i];
 90         d[i] = a[l-1-i];
 91         cout << d[i] << " ";
 92     }
 93     cout << endl;
 94 }
 95 
 96 template <class Type>
 97 void Array<Type>::find(Type t){
 98     int e = 0;
 99     int flag = 0;            // 0表示未找到 
100     for(int i=0;i<l;i++)
101     {
102         if(a[i]==t)
103         {
104             flag = 1;
105             cout << "是第" << i+1 << "个元素" << endl;
106             e = i; 
107             break;    
108             // 找到了就应该直接退出 
109             // 要不然如果不退出循环 后面有一样的值 就会又输出一遍 
110             // 当然如果你想将每个值的位置都输出也可以 但是一般常理是找第一个出现的值
111             
112             // 另外可能没找到 你应该对这种情况做一个判断 如果没找到 输出适当提示信息
113             // 判断没找到的方法很简单 就是用一个flag变量来标识是否找到 
114         }
115     }
116     
117     // 判断是否未找到该元素 
118     if(flag==0)
119     {
120         cout << "未找到该元素" << endl;
121     }
122     
123 }
124 
125 template <class Type>
126 void Array<Type>::sum(){
127     int i;
128     Type res = 0;            // res应该初始化        
129     for(i=0;i<l;i++)
130     {
131         res += a[i];
132     }
133     
134     cout << "数组和为:" << res <<endl;
135 }
136 
137 int main()
138 {
139     int i, x, y, q;
140     double p;
141     
142     // 构建初始数组 
143     cout << "请输入两种类型数组元素个数: " << endl;
144     cin >> x >> y;
145     int *a;
146     double *b;
147     a = new int[x];
148     b = new double[y];
149     cout<<"请输入int型数组元素"<<endl;
150     for(i=0;i<x;i++)
151     {
152         cin >> a[i];
153     }
154     cout << "请输入double型数组元素" << endl;
155     for(i=0;i<y;i++)
156     {
157         cin >> b[i];
158     }
159     
160     // 用初始数组初始化 模板类数组 
161     Array<int> c(a,x);
162     Array<double> d(b,y);
163     
164     // int型数组功能展示 
165     cout << "int 型数组:" << endl;
166     cout << "排序:" << endl;
167     c.sort();
168     cout << "倒置:" << endl;
169     c.reverse();
170     cout << "请输入要查找的元素: ";
171     cin >> q;
172     c.find(q);
173     cout << "求和:" << endl;
174     c.sum();
175     
176     // double型数组功能展示 
177     cout << "double 型数组:" << endl;
178     cout << "排序:" << endl;
179     d.sort();
180     cout << "倒置:" << endl;
181     d.reverse();
182     cout << "请输入要查找的元素: ";
183     cin >> p;
184     c.find(p);
185     cout << "求和:" << endl;
186     d.sum();
187     
188     // 清除数据 
189     delete []a;
190     delete []b;
191     
192     return 0;
193     
194 }
原文地址:https://www.cnblogs.com/wyb666/p/9210660.html