首页 > 编程语言 >c++模板例题

c++模板例题

时间:2023-05-22 20:56:11浏览次数:65  
标签:cout int void c++ 数组 Array 例题 Type 模板

一、问题描述。
1 编写一个程序,使用类模板对数组元素进行排序,倒置、查找和求和
2 具有对数组元素进行排序,倒置、查找和求和功能,
3 然后产生类型实参分别为int型和double型的两个模板类,
4 分别对整型数组与双精度数组完成所要求的操作
 

实现代码:

  #include<iostream>
 using namespace std;
 const int SIZE=100;

 // Array -> 模板类(类模板)  
  template <class Type>
  class Array{
  private:
     int l, z;
    Type a[SIZE];
  public:
     Array(Type *b, int n)
     {
       int i;
       l = n;
       cout << "Array构造函数: " << endl;         // debug
       for(i=0;i<l;i++)

       {           

          a[i] = b[i];

          cout << a[i] << " ";        }         cout << endl;    }           void paixu();        void daozhi();         void chazhao(Type t);        void add();     

  void sort();
   void reverse();
      void find(Type t);
    void sum();    
          
 };
 template <class Type>
  void Array<Type>::sort(){ 
     Type c[SIZE];
      int i, j, m;
      for(i=0;i<l;i++)
     {
        c[i] = a[i];    
    }
 
  // 排序 升序排序 
  for(j=0;j<l;j++)
   {
        for(j=i;j<l;j++)
          {
              if(c[i]>c[j])
              {
                  m = c[i];
                  c[i] = c[j];
                 c[j] = m;
            }
          }
      }
     for(i=0;i<l;i++)
     {
          cout << c[i] << " ";    
      }
      cout << endl;
     
  }
        
 template <class Type>
  void Array<Type>::reverse(){
      int i;
      Type d[l];                // 声明数组 
      for(i=0;i<l;i++)
      {
         // int d[i] = a[l-1-i];
          d[i] = a[l-1-i];
          cout << d[i] << " ";
      }
      cout << endl;
  }
  
  template <class Type>
  void Array<Type>::find(Type t){
      int e = 0;
      int flag = 0;            // 0表示未找到 
     for(int i=0;i<l;i++)
     {
        if(a[i]==t)
       {
            flag = 1;
           cout << "是第" << i+1 << "个元素" << endl;
            e = i; 
          break;    
        }
    }
    
    // 判断是否未找到该元素 
    if(flag==0)
    {
       cout << "未找到该元素" << endl;
    }
 }
 template <class Type>
 void Array<Type>::sum(){
     int i;
    Type res = 0;            // res应该初始化        
    for(i=0;i<l;i++)
     {
         res += a[i];
    }
     
     cout << "数组和为:" << res <<endl;
 }
 
 int main()
 {
     int i, x, y, q;
    double p;
    
    // 构建初始数组 
    cout << "请输入两种类型数组元素个数: " << endl;
     cin >> x >> y;
    int *a;
     double *b;
    a = new int[x];
    b = new double[y];
     cout<<"请输入int型数组元素"<<endl;
     for(i=0;i<x;i++)
     {
         cin >> a[i];
     }
     cout << "请输入double型数组元素" << endl;
    for(i=0;i<y;i++)
    {
         cin >> b[i];
     }
     
    // 用初始数组初始化 模板类数组 
    Array<int> c(a,x);
    Array<double> d(b,y);
    cout << "int 型数组:" << endl;
    cout << "排序:" << endl;
    c.sort();
    cout << "倒置:" << endl;
    c.reverse();
    cout << "请输入要查找的元素: ";
    cin >> q;
    c.find(q);
    cout << "求和:" << endl;
    c.sum();
    
    // double型数组功能展示 
    cout << "double 型数组:" << endl;
    cout << "排序:" << endl;
    d.sort();
    cout << "倒置:" << endl;
    d.reverse();
    cout << "请输入要查找的元素: ";
    cin >> p;
    c.find(p);
    cout << "求和:" << endl;
    d.sum();
    delete []a;
    delete []b;
    return 0;
}

标签:cout,int,void,c++,数组,Array,例题,Type,模板
From: https://www.cnblogs.com/luoqingci/p/17421699.html

相关文章

  • c++打卡练习(36)
    求多项式的和以50为例S=1+1/2+1/2*3+1/2*3*4+......1/2*3*.....*50流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){ doublea=1,b,num,N; cout<<"输入你想阶乘到的最大数"<<endl; cin>>N; for(inti=1;i<=N;i++){ a*=i; b=1/a; num......
  • 数组排序输出(函数模板)
    对于输入的每一批数,按从小到大排序后输出。一行输入为一批数,第一个输入为数据类型(1表示整数,2表示字符型数,3表示有一位小数的浮点数,4表示字符串,0表示输入结束),第二个输入为该批数的数量size(0<size<=10),接下来为size个指定类型的数据。输出将从小到大顺序输出数据。函数接口定义:sor......
  • c++打卡第三十四天
    一、勾股数1、问题描述 2、设计思路   由题可知,数学中并不存在两条直角边相等的勾股数,同时两个直角边的平方和并不一定是整形,可能会存在小数,这样我们的判断勾股数的方法就是,两个直角边的平方和开根号,对此值强制转化为整形,得到的结果进行平方看是否与两直角边的平方和相......
  • C++的cout
    ▲setw(n)用法:通俗地讲就是预设宽度如cout<<setw(5)<<255<<endl;结果是:(空格)(空格)255▲setfill(charc)用法:就是在预设宽度中如果已存在没用完的宽度大小,则用设置的字符c填充如cout<<setfill('@')<<setw(5)<<255<<endl;结果是:@@255▲setbase(i......
  • dede共用同一个文章ID展示多个不同的模板页面
    DEDE共用同一个文章ID展示多个不同的模板页面,比如链接:http://jinmengqiang.cn/info-1.htmlhttp://jinmengqiang.cn/plus/show.php?aid=1以上2个链接可以使用不同的模板,其实内容可以相同也可以不同的进行调用(这个需要后台二次开发进行配合)。首先复制/m/view.php并且改名......
  • c++的流
    C++getline函数用法getline()函数是一个比较常见的函数。根据名字直接望文生义,就知道这个函数是来完成读入一行数据。下面就对C++--getline()函数的用法说明,以及getline()函数作为while条件的问题,总结一下:在C++中本质上有两种getline函数:第一种:在头文件<istream>中,是iostr......
  • 鹏业安装算量软件_数据管理层次的模板化
    鹏业安装算量软件数据管理层次的模板化,用于群楼标准化数据快速建立操作步骤1.工程量表上点鼠标右键-导出模板2.另存模板名称3.打开新建工程4.工程量表上鼠标右键-导入模板5.选择模板文件软件中的操作1.打开已经做好的工程(层次结构已经建好),工程量表中点击鼠标右键,在弹出框中点击导出......
  • C++ inline 函数(转)
    (一)inline函数(摘自C++Primer的第三版)在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。inlineintmin(intfirst,intsecend){/****/};     inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,inline函数必......
  • C++11关键字constexpr看这篇就够了
    一、在普通函数中的使用例如下面的代码, 数组的大小必须是常量,在声明数组array时,用函数返回值,此时会报错:errorC2131:表达式的计算结果不是常数note:对未定义的函数或为未声明为“constexpr”的函数的调用导致了故障用constexpr关键字可以解决这种问题,在GetLen函数前加con......
  • 基于C++实现房贷计算器的设计
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]本次项目的要求是完成一个房贷计算器的设计,实现商业贷款、公积金贷款和组合贷款的利息计算三种功能。并且使用Qt或其他的界面库设计人机交互界面,要求界面友好方便使用。并且必须使用面向对象的思想进行设计,使用C++编程。1.题目要求......