zoukankan      html  css  js  c++  java
  • 实验6:Problem B: 数组类(II)

    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

     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 }

     代码2:

     1 #include<iostream>
     2 using namespace std;
     3 template <class T>
     4 class Array{
     5 private:
     6     int len;
     7     T *p;
     8 public:
     9     Array(int l){len=l;p=new T[l+1];}///为数组动态分配内存时,注意格式p=new T(l+1);如果用成 T *p=new T[l+1];会导致不能正常输入
    10     int size(){return len;}
    11     void put(int n)
    12     {
    13         int i,j;
    14         for(i=0;i<len-1;i++)
    15             for(j=i+1;j<len;j++)
    16         {
    17             if(p[j]>p[i])
    18             {
    19                 T temp=p[j];
    20                 p[j]=p[i];
    21                 p[i]=temp;
    22             }
    23         }
    24         if(n>=len)
    25             for(i=0;i<len;i++)
    26         {
    27             if(i!=len-1)
    28                 cout<<p[i]<<" ";
    29             else
    30                 cout<<p[i]<<endl;
    31         }
    32         else
    33             for(i=0;i<n;i++)
    34         {
    35             if(i!=n-1)///注意是n,不是len!
    36                 cout<<p[i]<<" ";
    37             else
    38                 cout<<p[i]<<endl;
    39         }
    40     }
    41     T &operator[](int n){return p[n];}
    42     ///~Array(){delete []p;}///动态内存分配的数组要手动释放内存(不加析构函数OJ上也不会报错,但会导致内存泄露!)
    43     ///friend istream &operator>>(istream &is,Array &c){T b;is>>b;return is;}
    44 };
    45 int main()
    46 {
    47     int cases, len;
    48     cin >> cases;
    49     for(int ca = 1; ca <= cases; ca++)
    50     {
    51         cin >> len;
    52         if(ca % 3 == 0)
    53         {
    54             Array<char> chr_arr(len);
    55             for(int i = 0; i < chr_arr.size(); i++)
    56                 cin >> chr_arr[i];
    57             chr_arr.put(10);
    58         }
    59         if(ca % 3 == 1)
    60         {
    61             Array<int> int_arr(len);
    62             for(int i = 0; i < int_arr.size(); i++)
    63                 cin >> int_arr[i];
    64             int_arr.put(10);
    65         }
    66         if(ca % 3 == 2)
    67         {
    68             Array<double> dbl_arr(len);
    69             for(int i = 0; i < dbl_arr.size(); i++)
    70                 cin >> dbl_arr[i];
    71             dbl_arr.put(10);
    72         }
    73     }
    74 }
    向代码最深处出发~!
  • 相关阅读:
    【机器学习基础】02、matplotlib基本01
    HIVE学习笔记
    实时数仓项目-01实时模块搭建
    net_framework-EF CodeFirst
    一些前端知识的小记
    .netcore-FreeSql的使用-搭建context
    netcore配置文件与发布
    .netcore与vue的学习笔记001
    .net项目的mvc简单发布
    .net中的SelectList在Html.DropdownList中的使用
  • 原文地址:https://www.cnblogs.com/auto1945837845/p/5383742.html
Copyright © 2011-2022 走看看