7-2 利用类模板,定义数组类 (30 point(s))
定义一个类模板:
template<typename T>
class Array
{
……
};
具有对数组元素进行排序和求和的功能。在主函数中,从键盘读入若干int型、double型和char型数据,分别对整型数组、双精度数组和字符数组完成所要求的操作。
输入格式:
每行为一个操作,每行的第一个数字为元素类型,1为int元素,2为double元素,3为char类型。若为int型元素,接着输入int数据,若为double元素,接着输入double数据,若为char型元素,三种类型的元素均以0结束。输入-1时表示全体输入结束。
输出格式:
int型、double型数据输出相应数组排序后的数据及数组的和,char型数据输出排序后的数组元素。
输入样例:
在这里给出一组输入。例如:
1 2 3 4 5 6 0
3 a s d e r q w t 0
2 1.1 2.3 5.6 7.8 0
-1
输出样例:
在这里给出相应的输出。例如:
[2,3,4,5,6]
20
[a,d,e,q,r,s,t,w]
[1.1,2.3,5.6,7.8]
16.8
收获
- 0!=‘0’ 所以判断停止的时候不要混用
- 不要用while(n);
- 自己写的函数不要和头文件里的函数重名
- 一部分一部分用cout测试。
#include<iostream>
#include<algorithm>
using namespace std;
template<typename T>
class Array
{ private:
T arr[10010];
int length;
public:
Array(){
T temp;
length=0;
cin>>arr[length];
//cout<<arr[length]<<endl;
while(arr[length]!=0){
if(arr[length]=='0'){
break;
}
length++;
cin>>arr[length];
//cout<<arr[length]<<endl;
}
//cout<<length<<endl;
}
void my_sort(){
sort(arr,arr+length);
}
T getSum(){
T temp=0;
for(int i=0;i<length;i++){
temp+=arr[i];
}
return temp;
}
void display(){
cout<<"[";
for(int i=0;i<length;i++){
if(i){
cout<<","<<arr[i];
}else{
cout<<arr[i];
}
}
cout<<"]\n";
}
};
int main(){
int n;
cin>>n;
while(n!=-1){
switch (n)
{
case 1:{
Array<int> a;
// a.my_sort();
a.display();
cout<<a.getSum()<<endl;
cin>>n;
break;
}
case 2:{
Array<double> b;
b.my_sort();
b.display();
cout<<b.getSum()<<endl;
cin>>n;
break;
}
case 3:{
Array<char> c;
c.my_sort();
//cout<<"sortendl"<<endl;
c.display();
//cout<<"display"<<endl;
cin>>n;
break;
}
default:
break;
}
}
return 0;
}
/*
1 2 3 4 5 6 0
-1
*/
/*
1 2 3 4 5 6 0
3 a s d e r q w t 0
2 1.1 2.3 5.6 7.8 0
-1
*/
/*
3 a s d e r q w t 0
-1
*/