[C++] Declarer des matrices de taille variable...

Declarer des matrices de taille variable... [C++] - C++ - Programmation

Marsh Posté le 16-03-2003 à 04:12:13    

le tout en etant le plsu efficace et rapide possible...
 
Y a un truc qui existe deja ?
 
car je vais avoir besoin d'une big matrice NxM contenant des double, et j'utiliser dans mon prog 3d comme base pour mes donnees...
 
y a un truc qui existe deja ou autre ? L'ideal serait que je puisse acceder a ses valeurs via matrice[i][j]; :D
 
merci ;)

Reply

Marsh Posté le 16-03-2003 à 04:12:13   

Reply

Marsh Posté le 16-03-2003 à 05:39:48    

tetedeiench a écrit :

le tout en etant le plsu efficace et rapide possible...
 
Y a un truc qui existe deja ?
 
car je vais avoir besoin d'une big matrice NxM contenant des double, et j'utiliser dans mon prog 3d comme base pour mes donnees...
 
y a un truc qui existe deja ou autre ? L'ideal serait que je puisse acceder a ses valeurs via matrice[i][j]; :D
 
merci ;)


 
regarde du côté des vecteur stl
 
http://www.sgi.com/tech/stl/


---------------
Borland rulez: http://pages.infinit.net/borland
Reply

Marsh Posté le 16-03-2003 à 16:09:56    

pas de matrice toutes prêtes dans la STL, mais c'est pas long à faire:
 

Code :
  1. template <typename T> class matrice : public std::vector<T> {
  2.   unsigned n,m;
  3. public:
  4.   matrice(unsigned _m, unsigned _n) : m(_m), n(_n), std::vector<T>(n*m) {}
  5.   T& operator()(unsigned i,unsigned j) { return (*this)[i*n+j]; }
  6.   const T operator()(unsigned i,unsigned j) const { return (*this)[i*n+j]; }
  7.   // et si tu préferes l'operateur crochet:
  8.   std::vector<T>::iterator operator[](unsigned i) { return begin()+i*n; }
  9.   std::vector<T>::const_iterator operator[](unsigned i) const { return begin()+i*n; }
  10.   unsigned nrow() const { return m; }
  11.   unsigned ncol() const { return n; }
  12. };


Reply

Marsh Posté le 16-03-2003 à 20:11:41    


 
Ca fonctionne bien, mais ca met des warnings à la compilation...
 
"warning: `typename std::vector<T, std::allocator<_CharT> >::iterator' is implicitly a typename"

Reply

Marsh Posté le 16-03-2003 à 20:16:30    

Elrond a écrit :


 
Ca fonctionne bien, mais ca met des warnings à la compilation...
 
"warning: `typename std::vector<T, std::allocator<_CharT> >::iterator' is implicitly a typename"


 
effectivement, j'ai donné le code sans tester :D le compilateur a raison, il faut mettre "typename" devant std::vector<T>::iterator et std::vector<T>::const_iterator

Reply

Marsh Posté le 16-03-2003 à 20:19:07    

Tu pourrais expliquer à quoi ca sert exactement "typename" s'il te plait.

Reply

Marsh Posté le 16-03-2003 à 20:48:48    

Elrond a écrit :

Tu pourrais expliquer à quoi ca sert exactement "typename" s'il te plait.


 
c'est expliqué précisement ici http://www.comeaucomputing.com/tec [...] /#typename
En gros le compilateur ne peut pas être sûr que std::vector<T>::iterator est le nom d'un type, et le typename sert à lever l'ambiguité et à dire "je confirme, c'est un type".
 
Il faut utiliser typename à chaque fois que tu fais réference à un type déclaré à l'intérieur d'une classe template.

Reply

Marsh Posté le 16-03-2003 à 20:51:52    

Merci :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed