我这里有两道C++关于模板的题哪位高手帮我下(小弟问的我不会)

[复制链接]
查看11 | 回复0 | 2009-1-30 06:28:38 | 显示全部楼层 |阅读模式
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;}总结一下:看似简单,写起来还真有点麻烦                                       
提问者对答案的评价:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行