专栏首页用户6093955的专栏Problem E: 数量的类模板

Problem E: 数量的类模板

#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
template<class T>
class Data
{
    private:
        T value;
    public:
        Data():value(0){}
        Data(T v):value(v){}
        void setValue(T v){ value = v;}
        T getValue(){return value;}
        bool operator>(Data<T> b){ return value > b.value;}   /*使用类模板对象时一定要显示指出模板实参*/
        bool operator<(Data<T> b){return value < b.value;}
        Data<T> operator+(const Data<T> b)
        {
            Data<T> c;
            c.value = value + b.value;
            return c;
        }
        friend ostream& operator<<(ostream &os, const Data<T> &s);       /*若写引用必须用const, 否则不能写引用&*/
        {
            os << setprecision(2) << fixed << s.value;
            return os;
        }

};

template<class T>
class GetResult
{
    public:
         static Data<T> getSum(Data<T> *arr, int num)
         {
             Data<T> sum(0);
             for(int i = 0; i < num; i++)
                sum.setValue(sum.getValue() + arr[i].getValue());
            return sum;
         }
         static Data<T> getMax(Data<T> *arr, int num)
         {
             T Max = arr[0].getValue();
             for(int i = 1; i < num; i++)
                Max = max(Max, arr[i].getValue());
            return Data<T>(Max);
         }
          static Data<T> getMin(Data<T> *arr, int num)
          {
              T Min;
              Min = arr[0].getValue();
              for(int i = 1; i < num; i++)
                Min = min(Min, arr[i].getValue());
                Data<T> m(Min);
                return m;
          }

};
//append.cc
int main()
{
    Data<int> iData[1001];
    Data<double> dData[1001];
    int cases, num;
    char ch;
    int u;
    double v;
    Data<int> a(10), b(20);
    Data<double> c(3.14), d(-4.1);
    cout<<"a + b = "<<(a + b)<<endl;
    cout<<"max(a, b) = "<<(a > b ? a : b)<<endl;
    cout<<"min(a, b) = "<<(a < b ? a : b)<<endl;
    cout<<"c + d = "<<(c + d)<<endl;
    cout<<"max(c, d) = "<<(c > d ? c : d)<<endl;
    cout<<"min(c, d) = "<<(c < d ? c : d)<<endl;
    cin>>cases;
    for (int i = 0; i < cases; i++)
    {
        cin>>ch;
        cin>>num;
        for (int j = 0; j < num; j++)
        {
            if (ch == 'i')
            {
                cin>>u;
                iData[j].setValue(u);
            }
            else if (ch == 'd')
            {
                cin>>v;
                dData[j].setValue(v);
            }
        }
        if (ch == 'i')
        {
            cout<<GetResult<int>::getMax(iData, num);
            cout<<" "<<GetResult<int>::getMin(iData, num);
            cout<<" "<<GetResult<int>::getSum(iData, num)<<endl;
        }
        else if (ch == 'd')
        {
            cout<<GetResult<double>::getMax(dData, num);
            cout<<" "<<GetResult<double>::getMin(dData, num);
            cout<<" "<<GetResult<double>::getSum(dData, num)<<endl;
        }
    }
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【软件18-循环队列及综合】

    F:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在...

    _DIY
  • Fire! UVA - 11624 (两步bfs)

    两步bfs,先出火到达各地时的时间(设初始时间为0,人每走一步为1s,在着一步内火可以向四周可触及的方向同时扩散),然后在bfs人,人能在某地当且仅当所到时间小...

    _DIY
  • C++中与类有关的注意事项(更新中~~~)

    当然了,首先调用基类的构造函数是不容置疑的,不管它在哪里,记住即可,不过关于对象成员的构造函数的调用还需注意, 见 L1, L2, L3, 它们的构造函数的调用...

    _DIY
  • Python写一个像QQ可快捷键唤起区域截屏的应用

    1).首先要能响应快捷键调起截屏程序,像QQ使用Ctrl+shift+B可以截屏一样;

    一墨编程学习
  • 截图和录屏工具,有它就够了

    截图功能想必大家在生活是比较经常用的。那么,你平时用哪些截图工具呢?用着是否高效,是否顺畅?是否使用QQ截图?

    格姗知识圈
  • 【每日推荐】一款绿色轻快的截图软件

    亲爱的读者朋友们,博主的每日推荐终于开始更新啦~~是不是很高兴呢? ? 什么?你不知道有每日推荐? ?   点我去了解一下吧。

    Blogbyme
  • PPIICC:简洁易用的长截图工具

    美丽应用
  • 更新|PC截图工具的最佳选择。

    说到截图,最常用的可能就是QQ自带的截图功能了,简单流畅能满足我们的日常需求,依附于QQ,没有特殊的需求甚至不需要其他的截图软件。

    课代表
  • mac os系统自带的截图快捷键有哪些?

    不知道有没有初用Mac的同学,一开始不知道Mac如何截图,不了解Mac自带截图功能的快捷键,每次要截图还要借助如QQ一类带截图工具的软件,非常繁琐。今天就来说说...

    连胜
  • 面试官让我手写一个生产者消费者模式?

    不知道你是否遇到过面试官让你手写生产者消费者代码。别说,前段时间有小伙伴还真的遇到了这种情况,当时是一脸懵逼。

    烟雨星空

扫码关注云+社区

领取腾讯云代金券