题目:编写一个程序,使用类模板对数组元素进行排序、倒置、查找和求和。
提示】:设计一个类模板。
Template
Class Array{
…
}
具有对数组元素进行排序、倒置、查找和求和功能,然后产生类型实参分别为int型和double类型的两个模板类,分别对整型数组和双精度数组完成所要求的操作
代码如下:
/*
编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和
具有对数组元素进行排序,倒置、查找和求和功能,
然后产生类型实参分别为int型和double型的两个模板类,
分别对整型数组与双精度数组完成所要求的操作
*/
#include<iostream>
using namespace std;
const int SIZE=100;//采用const只读变量当作全局变量//以下是模版类的定义和实现
template <class Type>
class Array{
private:int l, z;Type a[SIZE];//模版变量
public:Array(Type *b, int n){int i;l = n;for(i=0;i<l;i++){a[i] = b[i];cout << a[i] << " "; } cout << endl;}void sort();void reverse();void find(Type t);void sum(); };template <class Type>
void Array<Type>::sort(){ Type c[SIZE];int i, j, m;for(i=0;i<l;i++){c[i] = a[i]; }// 排序 升序排序 for(j=0;j<l-1;j++){for(i=0;i<l-1;i++){if(c[i]>c[i+1]){m = c[i];c[i] = c[i+1];c[i+1] = m;}}}// 输出排序后的数据 for(i=0;i<l;i++){cout << c[i] << " "; }cout<< endl;}template <class Type>
void Array<Type>::reverse(){int i;Type d[SIZE]; // 声明数组 for(i=0;i<l;i++){// int d[i] = a[l-1-i];d[i] = a[l-1-i];cout << d[i] << " ";}cout << endl;
}template <class Type>
void Array<Type>::find(Type t){int e = 0;int flag = 0; // 0表示未找到 for(int i=0;i<l;i++){if(a[i]==t){flag = 1;cout << "是第" << i+1 << "个元素" << endl;e = i; break; }}// 判断是否未找到该元素 if(flag==0){cout << "未找到该元素" << endl;}}template <class Type>
void Array<Type>::sum(){int i;Type res = 0; // res应该初始化 for(i=0;i<l;i++){res += a[i];}cout << "数组和为:" << res <<endl;
}int main()
{int i, x, y, q;double p;// 构建初始数组 cout << "请输入两种类型数组元素个数: " << endl;cin >> x >> y;int *a;double *b;a = new int[x];b = new double[y];cout<<"请输入int型数组元素"<<endl;for(i=0;i<x;i++){cin >> a[i];}cout << "请输入double型数组元素" << endl;for(i=0;i<y;i++){cin >> b[i];}// 用初始数组初始化 模板类数组 Array<int> c(a,x);Array<double> d(b,y);// int型数组功能展示 cout << "int 型数组:" << endl;cout << "排序:" << endl;c.sort();cout << "倒置:" << endl;c.reverse();cout << "请输入要查找的元素: ";cin >> q;c.find(q);cout << "求和:" << endl;c.sum();// double型数组功能展示 cout << "double 型数组:" << endl;cout << "排序:" << endl;d.sort();cout << "倒置:" << endl;d.reverse();cout << "请输入要查找的元素: ";cin >> p;d.find(p);cout << "求和:" << endl;d.sum();// 清除数据 delete []a;delete []b;return 0;}
截图如下