テンプレートとリロード演算子

2830 ワード

c++のテンプレートとリロード演算子は、コード量を大幅に削減し、速度を速めることができます.例:
#include
#include
using namespace std;
struct point{
	int x,y;
	point(int x=0,int y=0):x(x),y(y){}
};
point operator +(const point &a,const point&b)
{
	return point(a.x+b.x,a.y+b.y);
}
ostream& operator << (ostream &out,const point&p)
{
	out<
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[10]={1,2,3,4,5,5,6,7,8,9};
	point b[]={point(0,1),point(2,3),point(3,4)};
	cout<
c++小テスト、ポイントもintとdouble共通のテンプレートに変えてみてもいいです
試行:
#include
#include
using namespace std;
template
struct point{
	T x,y;
	point(T x=0,T y=0):x(x),y(y){}
};
point operator +(const point &a,const point&b)
{
	return point(a.x+b.x,a.y+b.y);
}
ostream& operator << (ostream &out,const point&p)
{
	out<
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()
{
	point a(1,2),b(2,3);
	point c(2.333,6.666);
	cout<
それからレポートが間違っていることに気づきました2333、もとはテンプレートを定義したpointが元のように勝手に使うことができませんでした
#include
#include
using namespace std;
template
struct point{
	T x,y;
	point(T x=0,T y=0):x(x),y(y){}
};
template
point operator +(const point &a,const point &b)
{
	return point(a.x+b.x,a.y+b.y);
}
template
ostream& operator << (ostream &out,const point&p)
{
	out<
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()
{
	point a(1,2),b(2,3);
	point c(2.333,6.666),d(1.23,2.22);
	cout<
注釈その場所は運行できないので、テンプレートの特性は同類無敵と言えるが、クラスをまたぐのは難しいだろう.例えばint型とdouble型、脳の穴が大きくなったら補う.
#include
#include
using namespace std;
template
struct point{
	T x,y;
	point(T x=0,T y=0):x(x),y(y){}
};
template
point operator +(const point &a,const point &b)
{
	return point(a.x+b.x,a.y+b.y);
}
template
ostream& operator << (ostream &out,const point&p)
{
	out<
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()
{
	point a(1,2),b(2,3);
	point c(2.333,6.666),d(1.23,2.22);
	cout<

今回は普通に解くことができますが、これは人為的な2333です.