c++模板例题

Posted luoqingci

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++模板例题相关的知识,希望对你有一定的参考价值。

一、问题描述。
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;

算法基础:差分算法及模板应用

⭐写在前面的话:本系列文章旨在复习算法刷题中常用的基础算法与数据结构,配以详细的图例解释,总结相应的代码模板,同时结合例题以达到最佳的学习效果。本专栏面向算法零基础但有一定的C++基础的学习者。若C++基础不牢固,可参考:10min快速回顾C++语法,进行语法复习。

以上是关于c++模板例题的主要内容,如果未能解决你的问题,请参考以下文章

算法基础| 差分算法及模板详解

算法基础:差分算法及模板应用

算法基础| 前缀和算法及模板详解

算法基础:离散化及模板详解

算法基础:单链表图解及模板总结

算法基础:区间合并算法及模板应用