IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

vector bidimensionnel et pointer ?


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut vector bidimensionnel et pointer ?
    Bonjour,
    J'ai un souci de syntaxe de pointeur.

    Soit un tableau bidimensionnel codé comme suit :
    std::vector < std::vector <long> > TabTab

    et un pointeur :
    std::vector <long>::pointer PtrTab

    Comment je pointe sur le début (ou la fin) du vector pointé par TabTab[0] ??
    Je demande car ceci ne marche pas : PtrTab=TabTab[0].begin() ou .end()
    provoquent un "Cannot convert Vector iterator... to long*".

    Est-ce quelqu'un voit ?

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Bonjour,
    Citation Envoyé par devroot Voir le message
    Bonjour,
    J'ai un souci de syntaxe de pointeur.

    Soit un tableau bidimensionnel codé comme suit :
    std::vector < std::vector <long> > TabTab
    Il est toujours préférable de faire un tableau 1D. Cherche sur le forum c'est assez récurrent.

    Citation Envoyé par devroot Voir le message
    et un pointeur :
    std::vector <long>::pointer PtrTab

    Comment je pointe sur le début (ou la fin) du vector pointé par TabTab[0] ??
    Je demande car ceci ne marche pas : PtrTab=TabTab[0].begin() ou .end()
    provoquent un "Cannot convert Vector iterator... to long*".

    Est-ce quelqu'un voit ?
    La stl utilise la notion d'iterator, sorte de pointeur intelligent. Il faut donc que tu utilise std::vector <long>::iterator

  3. #3
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Merci pour les infos !

    1 - Je préfère continuer sur ma lancée en 2 Dimensions type Tab[x][y] :-)

    2 - J'ai essayé l'itérateur intelligent mais ca bloque sur le point suivant :

    Si TabTab est un vecteur de vecteurs....
    Si je veux "effacer" toutes les cases n°5 des vecteurs vers lesquels pointe
    mon tableau de vecteurs : std:vector<std::vector <long > > TabTab;

    Avec un itérateur : std:vector<std::vector <long > > ::iterator ItTabTab;
    J'essaie ceci :
    for (ItTabTab=TabTab.begin(); ItTabTab!=TabTab.end(); ItTabTab++)
    ItTabTab.erase(5);
    Et là, le compil me dit qu'erase n'est pas membre de iterator !
    Moi, je croyais que cet iterator servait dans mon exemple de pointeur sur
    un vecteur....

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    si tu souhaites persévérer dans cette voie difficile, je te conseilles de commencer par bien lire et bien comprendre la FAQ sur la classe vector. Tu devrais y trouver tout ce dont tu as besoin

  5. #5
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Je viens de relire la FAQ, de me rafraîchir la mémoire avec les itérateurs mais
    je ne vois toujours pas comment faire....

    Pour reformuler ma question :

    Si Toto est un vecteur, Toto.erase(5) permet d'en retirer la case n°5.
    Mais, comment faire si Toto est le vecteur n°1 dans un tableau de vecteurs appelé Tata par exemple ?

    Tata[0][1].erase(5); -> Ne marche pas...

    Je cherche donc une solution avec les itérateurs...

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 293
    Billets dans le blog
    2
    Par défaut
    Pour te mettre sur la voie, je te propose de jeter un un coup d'oeil sur le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // creation du vector
    std::vector< std::vector<int> > vv;
     
    // création d'une ligne
    vv.push_back( std::vector<int>() );
     
    // remplissage de cette ligne
    vv[0].push_back(1);
    vv[0].push_back(2);
    vv[0].push_back(3);
     
    // création d'une autre ligne
    vv.push_back( std::vector<int>() );
     
    // remplissage de cette ligne
    vv[1].push_back(11);
    vv[1].push_back(12);
    vv[1].push_back(13);

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    C'est pas un tableau 2D rectangulaire?

    Sinon ca devrait etre Tata[0].erase(5);
    Pourquoi le [1] ???

Discussions similaires

  1. Vector 2D de shared pointer
    Par Happpy dans le forum C++
    Réponses: 15
    Dernier message: 01/08/2011, 15h11
  2. Tableau bidimensionnel de Vector
    Par j0o0 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 05/05/2007, 19h51
  3. Vector bool, bidimensionnel
    Par Zacks dans le forum SL & STL
    Réponses: 7
    Dernier message: 13/06/2006, 17h48
  4. Réponses: 5
    Dernier message: 05/07/2003, 11h52
  5. [Pointer]Treeview.Data
    Par rbag dans le forum Composants VCL
    Réponses: 7
    Dernier message: 31/08/2002, 01h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo