Utiliser un iterator sur un vector à 2 dimensions - position

Utiliser un iterator sur un vector à 2 dimensions - position - C++ - Programmation

Marsh Posté le 19-05-2010 à 17:53:34    

J'utilise un iterateur à 2 dimensions, et je cherche à connaître la position pointée dans chaque dimension.
 
À une dimension c'est facile :  
 

Code :


std::vector<_Type > vect;
std::vector<_Type>::const_iterator it;
cout << it - vect.begin()<<endl;
 
Et à 2 dimensions, comment connaître la position dans chaque dimension ?

Code :
  1. std::vector<std::vector<_Type > > vect2D;
  2. std::vector<std::vector<_Type> >::const_iterator it;


 
Merci !


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 19-05-2010 à 17:53:34   

Reply

Marsh Posté le 19-05-2010 à 17:56:15    

tu dois itérer deux fois, du coup ...
 
Mais quand tu parles de position en deux dimensions, j'ai l'intuition que tu es mal parti. Ces vecteurs représentent quoi dans ton programme ?


---------------
last.fm
Reply

Marsh Posté le 19-05-2010 à 17:59:48    

theshockwave a écrit :

tu dois itérer deux fois, du coup ...

 

Mais quand tu parles de position en deux dimensions, j'ai l'intuition que tu es mal parti. Ces vecteurs représentent quoi dans ton programme ?

 

Des groupes ; la première dimension l'ensemble des groupes, et la deuxième est une liste d'objets qui sont en fait un même «noeuds électrique»

 

[edit] En tout, cela forme une «netlist»


Message édité par guepe le 19-05-2010 à 18:00:30

---------------
Un blog qu'il est bien
Reply

Marsh Posté le 19-05-2010 à 18:04:59    

ok, alors :

Code :
  1. vector< vector< int > > vect;
  2. vector< vector< int > >::const_iterator yBegin = vect.begin();
  3. for( vector< vector< int > >::const_iterator ity = yBegin; ity != vect.end(); ++ity )
  4. {
  5.     vector< int >& vectx = *ity;
  6.     vector< int >::const_iterator xBegin = vectx.begin();
  7.     for( vector< int >::const_iterator itx = xBegin; itx != vectx.end(); ++itx )
  8.     {
  9.         cout << "x:" << itx - xBegin << ", y:" << ity - yBegin <<endl;
  10.     }
  11. }


---------------
last.fm
Reply

Marsh Posté le 19-05-2010 à 18:08:15    

theshockwave a écrit :

ok, alors :

Code :
  1. vector< vector< int > > vect;
  2. vector< vector< int > >::const_iterator yBegin = vect.begin();
  3. for( vector< vector< int > >::const_iterator ity = yBegin; ity != vect.end(); ++ity )
  4. {
  5.     vector< int >& vectx = *ity;
  6.     vector< int >::const_iterator xBegin = vectx.begin();
  7.     for( vector< int >::const_iterator itx = xBegin; itx != vectx.end(); ++itx )
  8.     {
  9.         cout << "x:" << itx - xBegin << ", y:" << ity - yBegin <<endl;
  10.     }
  11. }



 
C'est malheureusement ce que je craignais ; depuis l'iterator itx il n'est pas possible de récupérer sa position dans la dimension «d'au dessus» :/
 
Bon ben je vais devoir passer les 2 iterator en paramètre :-/


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 19-05-2010 à 18:09:02    

guepe a écrit :


 
C'est malheureusement ce que je craignais ; depuis l'iterator itx il n'est pas possible de récupérer sa position dans la dimension «d'au dessus» :/
 
Bon ben je vais devoir passer les 2 iterator en paramètre :-/


 
Sinon, tu peux calculer la position avant et la transmettre à ta fonction, si tu as juste besoin de la position


---------------
last.fm
Reply

Marsh Posté le 19-05-2010 à 18:16:52    

theshockwave a écrit :


 
Sinon, tu peux calculer la position avant et la transmettre à ta fonction, si tu as juste besoin de la position


Oui c'est sur, enfin cela revient au même …
Merci !


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 19-05-2010 à 19:30:34    

t'as le droit de fair eun iterator_adaptor que tu construit à partir des deux et dont le * et ++ fait la tambuoille en interne.

Reply

Marsh Posté le 19-05-2010 à 20:36:50    

Joel F a écrit :

t'as le droit de fair eun iterator_adaptor que tu construit à partir des deux et dont le * et ++ fait la tambuoille en interne.


En fait je suis finalement en train de faire exactement cela …  :whistle:


---------------
Un blog qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

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