(考试)2017年大一下学期C++期末考试题目五

来源:互联网 发布:大乐斗技能奥义数据 编辑:程序博客网 时间:2024/06/04 19:39

4005:类模板

Problem Description
定义一个类模板,包括一个由小到大排列的数据序列,数据元素个数等数据成员,以及构造函数、输出函数和删除函数等成员函数。其中,删除函数用来删除数据系列中相同的数据。

Input
输入数据有多组,每组占3行, 第一行是整数,第二行是实数,第三行是字符。每行的第一个数是整数,表示元素个数。

Output
对于每组输入数据,输出占3行,每行输出删除相同元素后剩下的元素,每个元素后都带有1个空格。具体见输出样例。

Sample Input

5 1 2 2 3 56 2.4 2.4 3.3 3.3 4 68 aabbccdd

Sample Output

1 2 3 5 2.4 3.3 4 6 a b c d

心得

送分题,主要考察了类模板的简单应用,可以参考MNNUOJ的8079.

答案

#include <iostream>#include <cstring>using namespace std;template<class T>class array{private:    int length;    T *arr;public:    array(int length,T *s):length(length)    {        arr=new T[length];        for(int i=0;i<length;i++)            arr[i]=s[i];    }    void show()    {        for(int i=0;i<length;i++)            cout<<arr[i]<<" ";        cout<<endl;    }    void clear()    {        int top=0;        T *newArr=new T[length];        for(int i=0;i<length-1;i++)        {            if(arr[i]!=arr[i+1])                newArr[top++]=arr[i];        }        if(newArr[top-1]!=arr[length-1])            newArr[top++]=arr[length-1];        length=top;        arr=newArr;    }    ~array()    {        delete[] arr;    }};int main(){    int n,*a1;    double *a2;    char *a3;    while(cin>>n)    {        a1=new int[n];        for(int i=0;i<n;i++)            cin>>a1[i];        array<int> t1(n,a1);        t1.clear();        t1.show();        cin>>n;        a2=new double[n];        for(i=0;i<n;i++)            cin>>a2[i];        array<double> t2(n,a2);        t2.clear();        t2.show();        cin>>n;        a3=new char[n];        for(i=0;i<n;i++)            cin>>a3[i];        array<char> t3(n,a3);        t3.clear();        t3.show();        delete[] a1,a2,a3;    }    return 0;}
原创粉丝点击