【C++】 定义数组类模板

题目:

定义数组类模板,能够对数组元素进行排序、倒置、查找和求和,产生类型实参分别为int型和double型的两个模板类。从键盘输入数据到整型数组与双精度数组中,创建两个数组类对象,分别对整型数组与双精度型数组对象完成上述操作。

代码:

#include<bits/stdc++.h>
using namespace std;
#define MAXSIZE 100

template<class Type>

class Array
{
    int len,z;
    Type a[MAXSIZE];
public:
    Array(Type *b, int n)
    {
        int i;
        len=n;       
        for(i=0;i<len;i++)
        {
            a[i]=b[i];
        }
    }

	//函数声明 
	void print();
    void sort();
    void reverse();
    void find(Type t);
    void sum();

};

//打印数组 
template <class Type>
void Array<Type>::print()
{
	for(int i=0;i<len;i++)
	{
		cout<<a[i]<<" ";
	}
	cout<<endl;
}

//升序排序 
template <class Type>
void Array<Type>::sort()
{
    Type c[MAXSIZE];
    int i,j,m;
    for(i=0;i<len;i++)
    {
        c[i]=a[i];
    }

    for(j=0;j<len;j++)            //冒泡排序 
    {
        for(j=i;j<len;j++)
        {
            if(c[i]>c[j])
            {
                m=c[i];
                c[i]=c[j];
                c[j]=m;
            }
        }
    }

    for(i=0;i<len;i++)
    {
        cout<<c[i]<<" ";
    }
    cout<<endl;
}

//倒置数组 
template <class Type>
void Array<Type>::reverse()
{
    int i;
    Type d[len];              
    for(i=0;i<len;i++)
    {
        d[i]=a[len-i-1];
        cout<<d[i]<<" ";
    }
    cout<<endl;
}

//查找数组元素 
template <class Type>
void Array<Type>::find(Type t)
{
    int flag=0;          
    for(int i=0;i<len;i++)
    {
        if(a[i]==t)
        {
            flag=1;
            cout<<"该元素是第"<<i+1<<"个元素"<<endl;
            break;
        }
    }

    if(flag==0)
    {
        cout<<"未找到该元素"<<endl;
    }

}

//数组求和 
template <class Type>
void Array<Type>::sum()
{
    int i;
    Type add=0;           
    for(i=0;i<len;i++)
    {
        add+=a[i];
    }

    cout<<"数组和为:"<<add<<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);

    cout<<"\nint 型数组:"<<endl;
    cout<<"打印:"<<endl;
	c.print(); 
    cout<<"排序:"<<endl;
    c.sort();
    cout<<"倒置:"<<endl;
    c.reverse();
    cout<<"请输入要查找的元素: ";
    cin>>q;
    c.find(q);
    cout<<"求和:"<<endl;
    c.sum();

    cout<<"\ndouble 型数组:"<<endl;
    cout<<"打印:"<<endl;
	d.print();
    cout<<"排序:"<<endl;
    d.sort();
    cout<<"倒置:"<<endl;
    d.reverse();
    cout<<"请输入要查找的元素: ";
    cin>>p;
    d.find(p);
    cout<<"求和:"<<endl;
    d.sum();

    delete []a;
    delete []b;

    return 0;
}
  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值