c++函数模板

来源:互联网 发布:linux 安装jdk gz 编辑:程序博客网 时间:2024/06/06 07:30

我们要找出一个数组里面最大的数,可以这样

int getmax(int *p, int n){int max(0);max = p[0];for (int i = 1; i < n; i++){if (max < p[i])//确保max>=p[i]{max = p[i];}}return max;}double getmax(double *p, int n){double max(0);max = p[0];for (int i = 1; i < n; i++){if (max < p[i])//确保max>=p[i]{max = p[i];}}return max;}



用函数模板的话


template<typename T> T MAX(T*p, const int n){T maxdata(p[0]);for (int i = 1; i < n; i++){if (maxdata < p[i]){maxdata = p[i];}}return maxdata;}void main(){double a[10] = { 1,2,3,4,98,77};int b[10] = { 1,2,3,4,98,77,33,567,999,87 };cout << MAX(a, 10) << endl;cout << MAX(b, 10) << endl;system("pause");}

可变参数的函数模板,需要加" #include<cstdarg> " 头文件

#include<stdlib.h>#include<iostream>#include<cstdarg>using namespace std;template<typename NT>NT sum(int count,NT data1, ...){va_list arg_ptr;//参数列表的指针va_start(arg_ptr, count);//限定从count开始NT sumres(0);for (int i = 0; i < count; i++){sumres += va_arg(arg_ptr,NT);}va_end(arg_ptr);return sumres;}void main(){std::cout << sum(3,1,2,3) << std::endl;system("pause");}

注意,可变参数的函数模板,形参列表里有三个点




0 0