//局限:只能求整数数组的和
int sum(int *begin,int *end)
{
int *p=begin;
int ans=0;
for(int *p=begin;p!=end;p++)
{
ans+=*p;
}
return ans;
}
//修改后可用sum函数给double数组和Point数组求和了
template<typename T>
T sum(T *begin,T *end)
{
T *p=begin;
T ans=0;
for(T *p=begin;p!=end;p++)
{
ans=ans+*p;
}
return ans;
}
int main()
{
double a[]={1.1,2.2,3.3,4.4}
cout<<sum(a,a+4)<<endl;
Point b[]={Point(1,2),Point(3,4),Point(5,6),Point(7,8)};
cout<<sum(b,b+4)<<endl;
return 0;
}
结构体和类也可以带模板,可用类似写法将Point变成模板
#include<iostream>
using namespace std;
template<typename T>
struct Point
{
T x,y;
Point(T x=0,T y=0):x(x),y(y){}
};
template<typename T>
Point<T> operator+(const Point<T>& A,const Point<T>& B)
{
return Point<T>(.x+B.x,A.y+B.y);
}
template <typename T>
ostream& operator <<(ostream &out,const Point<T>&p)
{
out<<"("<<p.x<<","<<p.y<<")";
return out;
}
int main()
{
Point<int>a(1,2),b(3,4);
Point<double>c(1.1,2,2),d(3.3,4.4);
cout<<a+b<<" "<<c+d<<endl;
return 0;
}