| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 
 |  
template <int Begin, int End> struct Boucle
{
  template<class T>
  static void Add( T & p1, const T &p2)
    {
      p1[Begin]+=p2[Begin];
      Boucle<Begin+1,End>::Add(p1,p2);
    }
};
 
template <int N> struct Boucle<N, N>
{
  template<class T>
  static void Add( T & p1, const T &p2) {}
};
 
template <int dim, class T>
class Point
{
public:
 
  T dat[dim];
  inline Point<dim,T> & Add(const Point<dim,T>& p)
    {
      Boucle<0, dim>::Add(*this, p);
      return *this;
    }
    inline Point<dim,T> & Addf(const Point<dim,T>& p)
    {
      (*this)[0]+=p[0];
      (*this)[1]+=p[1];
      (*this)[2]+=p[2];
      (*this)[3]+=p[3];
      return *this;
    }
  inline const T & operator []( int i)
    const
    {
      return   this->dat[i];
    }
  inline  T & operator []( int i)
 
    {
      return   this->dat[i];
    }
};
 
int main(void){
 
  Point<4,int > p1,p2;
 
  int t1=time(NULL);
  for(int i=0;i<100000;i++)
    for(int j=0;j<1000;j++)
  {
    p1.Add(p2);
  }
  int t2=time(NULL);
  cout<< t2-t1<<endl;
 
  t1=time(NULL);
  for(int i=0;i<100000;i++)
    for(int j=0;j<1000;j++)
  {
    p1.Addf(p2);
  }
 t2=time(NULL);
 cout<< t2-t1<<endl;
} | 
Partager