テンプレートとリロード演算子
2830 ワード
c++のテンプレートとリロード演算子は、コード量を大幅に削減し、速度を速めることができます.例:
試行:
今回は普通に解くことができますが、これは人為的な2333です.
#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です.