實驗6:Problem B: 數組類(II),problemii
Description
封裝一個模板數組類,用於存儲數組和處理的相關功能,支持以下操作:
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()函數。
Input
輸入的第一個整數n,表示有n組測試數據。
後面的每行以一個整數k開頭,表示後面有k個同類型的數組元素。
數組元素有以下三種類型:整數、浮點數和字符,並且按固定的次序間隔出現。
Output
把輸入的數組,按值從大到小輸出前10個元素,若輸入不足10個則全部輸出。每行數據對應一個輸出。格式見sample。
Sample Input
3 10 1 2 3 4 5 6 7 8 9 0 5 1.1 2.2 3.3 4.4 5.5 20 ABCDEGHIJMNPRSTUVWXY
Sample Output
9 8 7 6 5 4 3 2 1 0 5.5 4.4 3.3 2.2 1.1 Y X W V U T S R P N
HINT
Append Code
append.cc,
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 }