实验报告三——类模板

上一篇整完之后发现我的代码高亮又复活了

真的是太神奇了

类模板真心挺坑爹的


用函数模板方式设计可以对某种数据类型的数组中的数据进行从小到大排序,然后用整型数据和字符型数据进行验证

要注意是排序作为函数模板,冒泡排序的交换过程本身不能作为模板

也就是说,从小到大排序的过程必须全在模板内完成

我一开始把交换两个成员的值单独写成模板

而且还犯了很低级的传入后不能传出的错误

最后还是老师告诉我该怎么写才整完的

在这里顺便复习一下冒泡排序的知识

冒泡排序是有两层循环的

第一层外循环是对所有数据来说的

假设所有数据都要重新排列,那他们就要交换size-1(成员数减一次)

第二层内循环是对单个数据来说的

在外循环结束后,交换到末尾的数据的前一个数据,只需要交换size-1-1

同理,第二次外循环结束后,倒数第三个数据只需要交换size-1-2

因为它不用和后面的再交换了

所以以此类推得出内循环的阈值就是size-1-i

#include<iostream>;
using namespace std;

template<typename T>

T sort(T a[],int size){
  
  int i=0;
  int j=0;
  T change;
  
  for(i=0;i<size-1;i++){
    for(j=0;j<size-1-i;j++){
    if(a[j]>a[j+1]){
        change=a[j+1];
        a[j+1]=a[j];
        a[j]=change;
      }
    }
  }

  
  for(i=0;i<size;i++){
    cout<<a[i];
  }
  
}

int main(){
  
  int number[5]={5,4,3,2,1};
  char word[5]={'e','d','c','b','a'};
  
  sort(number,5);
  sort(word,5);
  
  return 0;
  
}

设计一个类模板 template<class T>class data,用于对T类型的数组进行求所有元素的和,查找指定的元素是否存在,如果存在,则返回其所在数组元素的下标值,否则返回-1

为啥我说类模板很坑爹呢

因为这家伙的成员函数如果在类模板外声明

要像声明类模板一样写一遍老长了

所以成员函数干脆全放类模板里面

要注意所有的成员函数前面要加上<类型>

创建类成员的时候也要加上这个

这样这个成员里的函数就会全变成这个类型的

#include<iostream>
using namespace std;

template<class T>
class data{
  public:
    data(){
      int i = 0;
      for(i = 0 ; i < 100 ; i++){
        a[i]=0;
      }
    }
    
    data <T>input(){
      int i=0;
      int choose=0;
      cout<<"请输入数组内存放的数据"<<endl;
      system("cls");
      for(i=0;i<100;i++){
        cin>>a[i];
        cout<<"是否还要继续输入/1.是 2.否"<<endl;
        cin>>choose;
        system("cls");
        if(choose == 1){
          cout<<"请输入"<<endl; 
          continue;
        }else if(choose == 2){
          break;
        }
      }
    }
    
    data <T>sum(){
      int i=0;
      T all=0;
      for(i=0;i<100;i++){
        all = all + a[i];
      }
      cout<<all<<endl;
    }
    
    data <T>search(T target){
      int i=0;
      for(i=0;i<100;i++){
        if(a[i] == target){
          cout<<i<<endl;
          break;
        }else if(a[i] != target){
          cout<<-1<<endl;
          break;
        }
      }
    }
    
  private:
    T a[100];
    T target;
};

int main(){
  
  int choose=0;
  int number=0;
  char a[1];
  
  cout<<"请选择你要输入的数据类型/1.整数/2.字符"<<endl;
  cin>>choose;
  if(choose == 1){
    
    data<int>alpha;
    alpha.input();
    alpha.sum();
    cout<<"请输入搜索的数字"<<endl; 
    cin>>number;
    alpha.search(number);
    
  }else if(choose == 2){
    
    data<char>beta;
    beta.input();
    beta.sum();
    cout<<"请输入搜索的字母"<<endl; 
    cin>>a[0];
    beta.search(a[0]);
    
  }
  
  return 0;
  
}

 

发表评论

您的电子邮箱地址不会被公开。