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

C++ Discussion :

[C++] Parcourir une vector 2D avec un for_each


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut [C++] Parcourir une vector 2D avec un for_each
    Bonsoir à tous,

    Je me suis mis récemment au for_each, et je n'arrive pas à parcourir mon vector 2D pour libérer les ressources en mémoire.
    Soit la déclaration suivante :
    vector< vector<BITMAP*> > tableau;
    Je souhaiterais appliquer la fonction "libererBitmap" à tous les éléments du vector 2D avec des for_each sans boucles for...

    Pour libérer la mémoire avec un vector 1D, j'utilise un foncteur de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct DeleteBitmapVector
    {
        template <class T> void operator()(T& p) const
    	{
    	    libererBitmap(p);
    	}
     
    };
    // plus loin
    for_each(tableau1D.begin(), tableau1D.end(), DeleteBitmapVector());
    Je voudrais la même chose en 2D

    Merci à tous et bonne soirée !
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 116
    Billets dans le blog
    148
    Par défaut
    Bonsoir,

    Je doute que ce soit vraiment beaucoup mieux qu'un double for ... mais bon.
    Dans la théorie (car je n'ai jamais tenté de code de ce genre), cela serait:

    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
     
    struct DeleteBitmap
    {
        template <class T> void opertor()(T& p) const
        {
            libererBitmap(p);
        }
    }
     
    struct DeleteBitmapVector
    {
        template <class T> void operator()(T& p) const
        {
            for_each(p.begin(), p.end(), DeleteBitmap();
        }
    };
    // plus loin
    for_each(tableau2D.begin(), tableau2D.end(), DeleteBitmapVector());
    Petite explication.
    Nous avons un tableau 2D, qui est un std::vector d'un std::vector de Bitmap*. En code: std::vector< std::vector < Bitmap* > > myTab2D;Donc, lors du premier for_each() (celui du tableau 2D), il va parcourir tout les éléments, qui sont des tableau (1D) de Bitmap* -> [codeinline]std::vector < Bitmap* >[codeinline]
    Donc, il faut encore parcourir le tableau, afin de liberer tout les pointeurs. Donc j'utilise un nouveau for_each().

    Voilà tout, je pense.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    C'est bien ce que je pensais, je voulais l'avis des autres vu mon niveau pathétique en C++

    Bah je suis d'accord avec toi, une double boucle for suffirais mais il parait qu'il faut pas avec les vectors d'apfès la faq :
    http://cpp.developpez.com/faq/cpp/?p...elete_sequence

    Perso, je ne vois pas la différence mais bon

    Merci !
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 116
    Billets dans le blog
    148
    Par défaut
    Euh, dans cette FAQ, je ne vois pas ce qui dit qu'il faut mieux utiliser un for_each que un for avec des iterateurs.
    Je connais un cas, ou les iterateurs sont un peu plus compliqué à gerer (car de la suppression d'element du vecteur lors du parcours). Mais sinon ... le for suffira je pense.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Euh, dans cette FAQ, je ne vois pas ce qui dit qu'il faut mieux utiliser un for_each que un for avec des iterateurs.
    Je connais un cas, ou les iterateurs sont un peu plus compliqué à gerer (car de la suppression d'element du vecteur lors du parcours). Mais sinon ... le for suffira je pense.
    Oui on ne dit pas ce qui est le mieux mais vu que c'est cette méthode qui est fournis, voilà pourquoi je l'ai adopté sans savoir vraiment pourquoi
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  6. #6
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Un double BOOST_FOR_EACH serait plus lisible.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Parcourir une liste pucée avec les touches directionnelles
    Par hukiro dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/04/2013, 19h22
  2. Réponses: 3
    Dernier message: 30/01/2013, 14h38
  3. [JDOM] Parcourir une arborescence XML avec JDom
    Par sousou_ dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 17/08/2009, 10h38
  4. Parcourir une image 3D avec un cube
    Par adriangarello dans le forum Images
    Réponses: 5
    Dernier message: 16/05/2008, 14h41
  5. Comment parcourir une ficher word avec VBA?
    Par megapacman dans le forum VBA Word
    Réponses: 6
    Dernier message: 17/11/2006, 11h11

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