Iterateur sur vecteur a deux dimension [Résolu]

Amanobuo 65 Messages postés mardi 24 février 2004Date d'inscription 11 décembre 2006 Dernière intervention - 2 mai 2006 à 18:07 - Dernière réponse : Amanobuo 65 Messages postés mardi 24 février 2004Date d'inscription 11 décembre 2006 Dernière intervention
- 2 mai 2006 à 19:07
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
Afficher la suite 

3 réponses

Répondre au sujet
excrt 75 Messages postés mercredi 5 avril 2006Date d'inscription 3 juillet 2006 Dernière intervention - 2 mai 2006 à 18:31
+3
Utile
« *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 =-=-
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de excrt
Amanobuo 65 Messages postés mardi 24 février 2004Date d'inscription 11 décembre 2006 Dernière intervention - 2 mai 2006 à 19:04
0
Utile
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 !
Commenter la réponse de Amanobuo
Amanobuo 65 Messages postés mardi 24 février 2004Date d'inscription 11 décembre 2006 Dernière intervention - 2 mai 2006 à 19:07
0
Utile
Au fait, un detail : on peut remplacer (*iter1).begin() par iter1->begin()
+
Commenter la réponse de Amanobuo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.