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

Boost C++ Discussion :

[multi_array] comment utiliser les iterateurs?


Sujet :

Boost C++

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    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 288
    Billets dans le blog
    2
    Par défaut [multi_array] comment utiliser les iterateurs?
    Bonjour à tous,

    je ne parviens pas à comprendre comment s'utilisent les iterateurs de boost::multi_array. Je ne comprend pas la doc de boost sur ce sujet, et je ne trouve pas non plus d'exemple de code qui les utilise.

    Auriez-vous un exemple? Ou quelques explications?

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Ça fait pas un parcours en profondeur ou quelque chose comme ça ?

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    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 288
    Billets dans le blog
    2
    Par défaut
    Ben en fait, d'après ce que j'ai compris, c'est pas très pratique à utiliser ces iterateurs.

    Il y a de bons exemples dans le code de test:
    http://www.boost.org/doc/libs/1_35_0.../iterators.cpp

    Mais c'est un peu... abscons...

    En fait, les iterateurs pointent sur les sous-tableaux du multi_array. Un sous-tableau par dimension. Il faut donc ensuite parcourir chaque sous-tableau.

  4. #4
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Par défaut
    Les itérateurs prévus par boost sont particulièrement peu élégants à mon gout. J'utilise des feuilles de vignes dans le genre (par exemple en dimension 2 pour x/y):
    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
    template < class Value_type = F64, class Coordinate_type = F32 >
    class Rectangular_2D_area : public boost::multi_array<Value_type, 2>,
                                public Rectangular_grid<Coordinate_type>
    {
    private:    // PRIVATE -----
    typedef boost::detail::multi_array::index_gen<2,2>  area_index_type; // SHOULD be exposed by boost!
     
     
    public:     // PUBLIC -----
    // readability
    struct  area_view_type;
    struct  x_iterator;
    struct  x_const_iterator;
    struct  y_iterator;
    struct  y_const_iterator;
    (implémentation en dérivant soit de [const_]iterator, soit de typename subarray<1>::type::[const_]iterator).
    ça permet ensuite un peu de lisibilité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    template < class Value_type, class Coordinate_type >
    template < class View, class F > 
    void    Rectangular_2D_area<Value_type,Coordinate_type>::transform_each_element (
        View& a, const F& f )
    {
        for(x_iterator i(a); i!= a.end(); i++)
        {
            for(y_iterator j(i); j!= i->end(); j++)
            {
                *j = f(*j);
            }
        }
    }

  5. #5
    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
    Citation Envoyé par r0d Voir le message
    En fait, les iterateurs pointent sur les sous-tableaux du multi_array. Un sous-tableau par dimension. Il faut donc ensuite parcourir chaque sous-tableau.

    Comment voudrais tu qu'ils soient??

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    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 288
    Billets dans le blog
    2
    Par défaut
    En postant cette question, je n'avait pas la moindre idée de comment ils pourraient être. Je n'avais donc pas d'a-priori, c'est juste que je ne comprenais pas comment ils fonctionnaient.

    Mais, sur une matrice que j'avais fait une fois, j'avais implémenté des iterateurs qui parcouraient élément par élement. L'élément suivant du dernier élément d'une ligne (resp. colonne) étant le premier élément de la ligne (resp. colonne) suivante. Dans certains cas, c'est très utile, et puis selon comment est implémentée la matrice, c'est très efficace.

  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
    Citation Envoyé par r0d Voir le message
    En postant cette question, je n'avait pas la moindre idée de comment ils pourraient être. Je n'avais donc pas d'a-priori, c'est juste que je ne comprenais pas comment ils fonctionnaient.

    Mais, sur une matrice que j'avais fait une fois, j'avais implémenté des iterateurs qui parcouraient élément par élement. L'élément suivant du dernier élément d'une ligne (resp. colonne) étant le premier élément de la ligne (resp. colonne) suivante. Dans certains cas, c'est très utile, et puis selon comment est implémentée la matrice, c'est très efficace.
    Ha oui je suis débile parfois...
    J'avais oublié ce point
    C'est ca de passer du C++ au C

  8. #8
    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
    Apparemment tu peut parcourir tout les éléments par
    element* data() et size_type num_elements()

Discussions similaires

  1. [HTTP] Comment utiliser les POST par programation
    Par Popof dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 31/01/2005, 09h14
  2. Réponses: 4
    Dernier message: 13/12/2004, 20h37
  3. [COM] Comment utiliser les événements Word ?
    Par Laurent Dardenne dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 30/05/2004, 12h38
  4. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

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