(考試)2017年大一下學期C++期末考試題目五
阿新 • • 發佈:2019-01-08
4005:類模板
Problem Description
定義一個類模板,包括一個由小到大排列的資料序列,資料元素個數等資料成員,以及建構函式、輸出函式和刪除函式等成員函式。其中,刪除函式用來刪除資料系列中相同的資料。
Input
輸入資料有多組,每組佔3行, 第一行是整數,第二行是實數,第三行是字元。每行的第一個數是整數,表示元素個數。
Output
對於每組輸入資料,輸出佔3行,每行輸出刪除相同元素後剩下的元素,每個元素後都帶有1個空格。具體見輸出樣例。
Sample Input
5 1 2 2 3 5
6 2.4 2.4 3.3 3.3 4 6
8 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;
}