Iterateur sur vecteur a deux dimension [Résolu]

Signaler
Messages postés
65
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
11 décembre 2006
-
Messages postés
65
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
11 décembre 2006
-
Salut
Dans la librairie standard (encore ! :) )
J arrive (a peu pres) a me debrouiller avec un iterateur sur un vecteur a une dimension,
mais comment faire pour parcourir un vecteur a deux dimensions (un vecteur de vecteur quoi !)

    vector< vector > vect2d;  
    vector< vector >::iterator iter;   //j imagine que ca doit etre ca ?

    vect2d.resize(3);               //3 sous vecteurs
    vect2d[0].resize(10);      //de 10 elements chacun
    vect2d[1].resize(10);
    vect2d[2].resize(10);

    fill( vect2d[0].begin(), vect2d[0].end(), 10 );      //on remplis tout ca
    fill( vect2d[1].begin(), vect2d[1].end(), 20 );
    fill( vect2d[2].begin(), vect2d[2].end(), 30 );

    //ce que j utilise d'habitude pour les vecteur a une dimension
    for(iter=vect2d.begin(); iter!=vect2d.end(); iter++)
    {
        printf("%d\n", *iter);               // cout << *iter ne marche meme plus dans ce cas !
    }

    //affiche 3 nombre au hazard (pour 3 vecteur de vecteur !)

    Comment donc parcourir tout les elements de ce vecteur de vecteur ? j en ai besoin pour manipuler des vecteurs de vecteurs d'objet ou surement plus tard avec les listes !
merci

3 réponses

Messages postés
75
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
3 juillet 2006

« *iter » pointe sur ton vecteur «  vector< int > » dans « vector<vector > vect2d »

#include
#include <vector>
using namespace std;

vector<vector > vect2d;
vector<vector >::const_iterator iter1; // pour parcourir « vect2d »
vector::const_iterator iter2; // pour parcourir chaque vecteur de « iter1 »

// ...

//
// vect2d[0] to vect2d[2]
//
for (iter1 = vect2d.begin(); iter1 != vect2d.end(); iter1++)
{
  //
  // *iter1 == vector
  //
  // (*iter1)[0] to (*iter1)[9]
  //
  for (iter2 = (*iter1).begin(); iter2 != (*iter1).end(); iter2++) {
    cout << (*iter2) << endl;
  }
}

-=-= ExCRT =-=-
Messages postés
65
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
11 décembre 2006

Merci pour ce coup de main !
j avais presque trouve de mon cote mais j ete en train de serieusement buter sur la ligne
*iter1 == vector je ne pense pas que j aurai trouve !
C'est une technique utilisé souvent ? je ne l ai pas trouve sur les sites de C++ !
merci en tt cas !
Messages postés
65
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
11 décembre 2006

Au fait, un detail : on peut remplacer (*iter1).begin() par iter1->begin()
+