1.设计、实现并测试一个对具有n个元素的数组求最大值的应用,要求用函数模版完成。2.设计、实现并测试一个类模版,对数组元素进行排序、查找和求和。帮帮忙拉
1: #include <iostream.h>template <class Type> class Array{public: Array(){ MaxLen=10; element=new Type[MaxLen]; CurrentLen=0; } Array(Type *x,int count){ MaxLen=count+10; element=new Type[MaxLen]; for(CurrentLen=0;CurrentLen<count;CurrentLen++) element[CurrentLen]=x[CurrentLen]; } ~Array(){ delete []element; } Type GetMax(){ Type Max=element[0]; for(int i=1;i<CurrentLen;i++) if(Max<element) Max=element; return Max; }private: Type *element; int MaxLen,CurrentLen;};typedef Array<int> intArray;void main(){ int a[5]={1,2,3,4,5}; intArray x(a,5); cout<<"The Max is "<<x.GetMax()<<endl;}2: 和一类似:#include <iostream.h>template <class Type> class Array{public: friend ostream & operator <<(ostream &strm,Array<Type> &x){ for (int i=0,Len=x.GetLen();i<Len;i++) strm<<x.Get(i)<<" "; return strm; } Array(){ MaxLen=10; element=new Type[MaxLen]; CurrentLen=0; } Array(Type *x,int count){ MaxLen=count+10; element=new Type[MaxLen]; for(CurrentLen=0;CurrentLen<count;CurrentLen++) element[CurrentLen]=x[CurrentLen]; } ~Array(){ delete []element; } int GetLen(){ return CurrentLen; } Type Get(int i){ return element; } int Find(int count,Type x){//从第count个元素开始找x ,返回x在count后的第一个位置, if(count>=CurrentLen) return -1; while(element[count++]!=x){ if (count==CurrentLen) return -1; } return count; } void Order(bool x) {//x为true为从大小到排,否则反之 for (int i=1,j=0;i<CurrentLen;i++){ while(++j<CurrentLen) if(element[j-1]<element[j]&&x){ Type temp=element[j-1]; element[j-1]=element[j],element[j]=temp; } else if(element[j-1]>element[j]&&!x){ Type temp=element[j-1]; element[j-1]=element[j],element[j]=temp; } j=0; } }//写得有点不简洁..自己简化好了 Type Sum(){ Type sum=element[0]; for(int i=1;i<CurrentLen;i++) sum+=element; return sum; }private: Type *element; int MaxLen,CurrentLen;};typedef Array<int> intArray;void main(){
//根据你的喜好自己修改吧 int a[5]={1,2,3,4,5}; intArray x(a,5); int n,count=0; cout<<"请输入要查找的数字:"; cin>>n; while((count=x.Find(count,n))!=-1) cout<<"数组中第 "<<count<<" 个元素值为 "<<n<<endl; cout<<"查找完毕"<<endl; x.Order(true); cout<<"按由大到小排列为: "<<x<<endl; x.Order(false); cout<<"按由小到大排列为: "<<x<<endl; cout<<"数组中所有元素的和为: "<<x.Sum()<<endl;}总结一下:看似简单,写起来还真有点麻烦
提问者对答案的评价: |