封装一个模板数组类,用于存储数组和处理的相关功能,支持以下操作:
1. Array::Array(int l)构造方法:创建一个长度为l的组对象。
2. Array::size()方法:返回Array对象中元素个数。
3. Array::put(int n)方法:按从大到小的顺序输出前n大元素,若数组长度小于n则从大到小输出全部元素。
4. 下标运算符:返回下标所指的元素。
-----------------------------------------------------------------------------
你设计一个模板数组类Array,使得main()函数能够正确运行。
函数调用格式见append.cc。
append.cc中已给出main()函数。
输入的第一个整数n,表示有n组测试数据。
后面的每行以一个整数k开头,表示后面有k个同类型的数组元素。
数组元素有以下三种类型:整数、浮点数和字符,并且按固定的次序间隔出现。
把输入的数组,按值从大到小输出前10个元素,若输入不足10个则全部输出。每行数据对应一个输出。格式见sample。
1 #include<iostream>
2 #include<algorithm>
3 using namespace std;
4 template <class T>
5 class Array{
6 private:
7 T *p;
8 int length;
9 public:
10 Array(int l)
11 {
12 p=new T[l+1];
13 length=l;
14 }
15 void put(int n)
16 {
17 int i;
18 for (int k=0;k<length-1;k++)
19 for (int j=k+1;j<length;j++)
20 if (p[k]<p[j])
21 swap(p[k],p[j]);
22
23 if (n>=length)
24 {
25 for (i=0;i<length-1;i++)
26 cout<<p[i]<<" ";
27 cout<<p[i]<<endl;
28 }
29 else
30 {
31 for (i=0;i<n-1;i++)
32 cout<<p[i]<<" ";
33 cout<<p[i]<<endl;
34 }
35 }
36 int size()
37 {
38 return length;
39 }
40 T& operator[](int n)
41 {
42 return p[n];
43 }
44 friend istream& operator >> (istream &is,Array &c)
45 {
46 T b;
47 is >> b;
48 return is;
49 }
50 ~Array()
51 {
52 delete[]p;
53 }
54 };
55
56 int main()
57 {
58 int cases, len;
59 cin >> cases;
60 for(int ca = 1; ca <= cases; ca++)
61 {
62 cin >> len;
63 if(ca % 3 == 0)
64 {
65 Array<char> chr_arr(len);
66 for(int i = 0; i < chr_arr.size(); i++)
67 cin >> chr_arr[i];
68 chr_arr.put(10);
69 }
70 if(ca % 3 == 1)
71 {
72 Array<int> int_arr(len);
73 for(int i = 0; i < int_arr.size(); i++)
74 cin >> int_arr[i];
75 int_arr.put(10);
76 }
77 if(ca % 3 == 2)
78 {
79 Array<double> dbl_arr(len);
80 for(int i = 0; i < dbl_arr.size(); i++)
81 cin >> dbl_arr[i];
82 dbl_arr.put(10);
83 }
84 }
85 }