Advertisement
Guest User

Vecteur.cxx

a guest
Mar 15th, 2010
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. #include "Vecteur.h"
  2. #include <cassert>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. template<class T>
  8. Vecteur<T>::Vecteur(unsigned int dim, const T &values):
  9.     m_dim( dim ),
  10.     m_values( new T[m_dim] )
  11. {
  12.     for(unsigned int i=0; i<m_dim; ++i)
  13.         m_values[i] = values;
  14. }
  15.  
  16. template<class T>
  17. Vecteur<T>::Vecteur(const Vecteur<T> &v):
  18.     m_dim( v.m_dim ),
  19.     m_values( new T[m_dim] )
  20. {
  21.     for(unsigned int i=0; i<m_dim; ++i)
  22.         m_values[i] = v.m_values[i];
  23. }
  24.  
  25. template<class T>
  26. Vecteur<T>::~Vecteur()
  27. {
  28.     delete [] m_values;
  29. }
  30.  
  31. template<class T>
  32. Vecteur<T> &Vecteur<T>::operator=(const Vecteur<T> &v)
  33. {
  34.     // utilisation du constructeur de copie
  35.     Vecteur temp( v );
  36.  
  37.     // inversion des attributs m_values du Vecteur courante et du Vecteur temp
  38.     std::swap(temp.m_values, m_values);
  39.  
  40.     return *this;
  41. }
  42.  
  43. // retourne le vecteur somme des deux vecteurs passés en paramètre
  44. // /!\ les vecteurs passés en paramètre doivent être de même dimension
  45. template<class T>
  46. Vecteur<T> Vecteur<T>::operator+(const Vecteur<T> &v)
  47. {
  48.     unsigned int dim = v.m_dim;
  49.  
  50.     assert( m_dim == dim );
  51.  
  52.     Vecteur<T> temp = Vecteur( dim );
  53.  
  54.     for(unsigned int i=0; i<dim; ++i)
  55.         temp[i] = m_values[i]+v.m_values[i];
  56.  
  57.     return temp;
  58. }
  59.  
  60. template<class T>
  61. T &Vecteur<T>::operator[](unsigned int i)
  62. {
  63.     assert( i < m_dim );
  64.  
  65.     return m_values[i];
  66. }
  67.  
  68. template<class T>
  69. T &Vecteur<T>::operator[](unsigned int i) const
  70. {
  71.     assert( i < m_dim );
  72.  
  73.     return m_values[i];
  74. }
  75.  
  76. // retourne la dimension du vecteur
  77. template<class T>
  78. unsigned int Vecteur<T>::dimensions(void) const
  79. {
  80.     return m_dim;
  81. }
  82.  
  83. // produit scalaire
  84. // /!\ les vecteurs passés en paramètre doivent être de même dimension
  85. template<class T>
  86. T operator*(const Vecteur<T> &v, const Vecteur<T> &w)
  87. {
  88.     unsigned int dim = v.dimensions();
  89.  
  90.     assert( dim == w.dimensions() );
  91.  
  92.     T r = 0;
  93.     for(unsigned int i=0; i<dim; ++i)
  94.         r += v[i] * w[i];
  95.  
  96.     return r;
  97. }
  98.  
  99. template<class T>
  100. std::ostream &operator<<(std::ostream &out, Vecteur<T> &v)
  101. {
  102.   unsigned int dim = v.m_dim;
  103.  
  104.   out << "[";
  105.   for(unsigned int i=0; i<dim-1; ++i)
  106.       out << v.m_values[i] << ",";
  107.   out << v.m_values[dim-1] << "]";
  108.  
  109.   return out;
  110. }
  111.  
  112. template<class T>
  113. std::istream &operator>>(std::istream &in,  Vecteur<T> &v)
  114. {
  115.   unsigned int dim = v.m_dim;
  116.   T t[dim];
  117.   for(unsigned int i=0; i<dim; ++i)
  118.   {
  119.       std::cout << "coef " << i << " : ";
  120.       in >> t[i];
  121.       v.m_values[i] = t[i];
  122.   }
  123.  
  124.   return in;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement