21xrx.com
2024-12-22 21:46:17 Sunday
登录
文章检索 我的文章 写文章
C++模板的例题
2023-07-13 11:50:43 深夜i     --     --
C++ 模板 例题 泛型编程 STL

C++模板是C++中一个非常重要的特性,通过使用模板,程序员可以非常方便地定义一些通用的数据类型和函数,从而大大地提高代码复用性。下面我们来看一个C++模板的例题。

例题:给定一个数组,求其最大值和最小值。

这是一个非常基础的问题,我们可以先使用普通的函数来实现,代码如下:


int getMax(int arr[], int size) {

  int max = arr[0];

  for (int i = 1; i < size; i++) {

    if (arr[i] > max) {

      max = arr[i];

    }

  }

  return max;

}

int getMin(int arr[], int size) {

  int min = arr[0];

  for (int i = 1; i < size; i++) {

    if (arr[i] < min) {

      min = arr[i];

    }

  }

  return min;

}

int main() {

  int arr[] = 3;

  int size = sizeof(arr)/sizeof(int);

  int max = getMax(arr, size);

  int min = getMin(arr, size);

  cout<<"max = "<<max<<", min = "<<min<<endl;

  return 0;

}

但是上述代码存在一个问题:当我们需要求一个双精度数组或者字符数组等其他类型的数组的最大值和最小值时,就需要重新写一份相同逻辑的代码,这明显是非常低效的。因此,我们可以考虑使用模板来解决这个问题:


template <typename T>

T getMax(T arr[], int size) {

  T max = arr[0];

  for (int i = 1; i < size; i++) {

    if (arr[i] > max) {

      max = arr[i];

    }

  }

  return max;

}

template <typename T>

T getMin(T arr[], int size) {

  T min = arr[0];

  for (int i = 1; i < size; i++) {

    if (arr[i] < min) {

      min = arr[i];

    }

  }

  return min;

}

int main() {

  int arr[] = 6;

  int size = sizeof(arr)/sizeof(int);

  int max = getMax(arr, size);

  int min = getMin(arr, size);

  cout<<"max = "<<max<<", min = "<<min<<endl;

  double arr2[] = 3.1;

  size = sizeof(arr2)/sizeof(double);

  double max2 = getMax(arr2, size);

  double min2 = getMin(arr2, size);

  cout<<"max2 = "<<max2<<", min2 = "<<min2<<endl;

  char arr3[] = 'c';

  size = sizeof(arr3)/sizeof(char);

  char max3 = getMax(arr3, size);

  char min3 = getMin(arr3, size);

  cout<<"max3 = "<<max3<<", min3 = "<<min3<<endl;

  return 0;

}

可以看到,我们使用了两个模板函数 getMax 和 getMin,它们可以接受任意类型的数组作为参数,而不需要重新实现相同的逻辑。这样,我们就大大地提高了代码的复用性和可维护性。

总之,C++模板是一个非常有用的特性,它可以帮助我们编写更加通用和高效的代码。在实际开发中,我们应该适当地使用模板,从而提高自己的编程水平。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复