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 :

[Assign]Quel est l'avantage de list_of


Sujet :

Boost C++

  1. #1
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut [Assign]Quel est l'avantage de list_of
    Bonjour à tous,

    Malgré plusieurs recherches, je ne trouve pas la réponse à une question aussi simple : Quelle est l'utilité de list_of et comment bien l'utiliser. Un exemple sera plus parlant que des explications (enfin je l'espère ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //
    //type de Data.IB : std::vector< unsigned int >
    //type de offset : unsigned int
    //
     
    // Code1 :
    boost::array<unsigned int,3> IndexProj = { Data.IB[offset], Data.IB[offset+1], Data.IB[offset+2] };
     
    // Code2 :
    boost::array<unsigned int,3> IndexProj2 = list_of (Data.IB[offset]) (Data.IB[offset+1]) (Data.IB[offset+2]);
    Ces deux codes me donnent le même résultat, alors quelle est la différence? pourquoi en utiliser un plutôt que l'autre? (mis à part le fait qu'il faut utiliser boost parce que c'est bien )

    Merci d'avance et bonne journée

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Bien évidemment, dans ce cas là, aucune utilité.

    Mais regarde le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template <typename T, int N, int M> boost:array<T, N+M> concat(const boost::array<T,N>& a1, const boost::array<T,M>& a2);
    Avec la notation { e1, ..., eN } tu écris implicitement le nombre d'éléments.
    Avec list_of, tu peux partir d'un tableau, lui rajouter un élément, et ce dans une boucle par exemple.

    Dans mon exemple précédent, tu fais un list_of des 2 tableaux, que tu mets dans un troisième, qui est celui renvoyé par la fonction.

  3. #3
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Merci pour ta réponse
    Citation Envoyé par Alp Voir le message
    Avec la notation { e1, ..., eN } tu écris implicitement le nombre d'éléments.
    Jusque là tout va bien...
    Citation Envoyé par Alp
    Avec list_of, tu peux partir d'un tableau, lui rajouter un élément, et ce dans une boucle par exemple
    Dans cet exemple on travail sur des tableaux fixes, je ne vois pas comment rajouter des éléments ?
    Citation Envoyé par Alp
    Dans mon exemple précédent, tu fais un list_of des 2 tableaux, que tu mets dans un troisième, qui est celui renvoyé par la fonction
    Idem, je ne vois pas comment faire, j'ai bien essayé mais le problème c'est que je n'ai pas encore vu d'autre utilisation pour list_of que celle du code que j'ai écrit. Et je n'ai rien trouvé dans la doc, ce lien va peut-être un tout petit peu plus loin (Partie 3 : Advanced usage) mais sans plus...

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par babar63 Voir le message
    Merci pour ta réponse
    Jusque là tout va bien...Dans cet exemple on travail sur des tableaux fixes, je ne vois pas comment rajouter des éléments ?
    Bah c'est pas à ce tableau que tu rajoutes un élément. Il s'agit de construire un tableau de taille fixe un peu plus grand histoire de concaténer les 2 tableaux.

    Il me semble que ça marche comme ça. Si quelqu'un peut confirmer

  5. #5
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Citation Envoyé par Alp
    Bah c'est pas à ce tableau que tu rajoutes un élément. Il s'agit de construire un tableau de taille fixe un peu plus grand histoire de concaténer les 2 tableaux
    Pourquoi un peu plus grand, pas de taille (M+N) selon ton exemple? J'avoue que là je suis largué...

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    On s'est mal compris : si on reprend un exemple, il s'agit effectivement de créer un tableau de taille N+M contenant les deux autres.

  7. #7
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Bon... Il semblerait que j'ai des problèmes de communication en ce moment
    Si je reprend ce que tu as dit :
    Citation Envoyé par Alp
    Avec list_of, tu peux partir d'un tableau, lui rajouter un élément, et ce dans une boucle par exemple
    Un petit exemple ?
    Citation Envoyé par Alp
    Dans mon exemple précédent, tu fais un list_of des 2 tableaux, que tu mets dans un troisième, qui est celui renvoyé par la fonction
    Comment faire? Un exemple?

    Merci pour ton aide

  8. #8
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Bon en fait je m'étais un peu emballé, ce n'est pas possible avec les boost.array. Pourquoi ? Il n'y a rien qui permet d'obtenir quelque chose pour un tableau de taille M depuis un tableau de taille M-1 par exemple.

    Par contre, il me semble que faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::list<int> l = list_of(1)(2);
    for(int i = 0; i < 10; i++)
    {
    l += list_of(22)(33);
    }
    n'est pas interdit, si ? (en fait, il me semble que ça ne va pas passer vu les prototypes)
    Si ça ce n'est pas possible, tu as toujours ce code qui te montre l'utilisation de push_back, repeat & co. En gros, ça te facilite l'utilisation.
    Même si on ne peut pas faire de += avec list_of, il suffit en fait de faire du push_back par exemple.

  9. #9
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Citation Envoyé par Alp
    Par contre, il me semble que faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::list<int> l = list_of(1)(2);
    for(int i = 0; i < 10; i++)
    {
    l += list_of(22)(33);
    }
    n'est pas interdit, si ?
    Non en effet ça ne semble pas fonctionner mais la surcharge de l'opérateur += à été prévu pour ce genre de cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::list<int> l = list_of(1)(2);
    for(int i = 0; i < 10; i++)
    {
    l += 22,33;
    }
    En revanche, c'est vrai que les fonctions range, repeat... ajoute de l'intérêt aux list_of

    Dis moi si je me trompe, mais j'ai l'impression que list_of est "plutôt" à utiliser pour les conteneurs de la std et non boost::array (pour l'initialisation), je veux dire en fait qu'il semble préférable d'utiliser les '{' pour initialiser un boost::array lorsque c'est possible... non?

  10. #10
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Oui. Ca utilise moins de caractères, donc ça va plus vite à taper

    En effet list_of me semble plutôt utilse pour les autres conteneurs.

  11. #11
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Citation Envoyé par Alp
    Oui. Ca utilise moins de caractères, donc ça va plus vite à taper
    Non non ce n'est pas la raison auquel je pensais , il est dit dans le premier lien que j'ai donné, que l'appel de list_of n'est pas le plus efficient pour une initialisation direct, j'en ai donc déduit que cela venait de la conversion "conteneur générique" => "conteneur à initialiser"... (mais je me méfie de mes déductions )

  12. #12
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Dans tous les cas, pour boost::array il est meilleur d'initialiser avec { }.
    Pour le reste, list_of, range, repeat, += et compagnie s'avèreront bien assez efficaces

  13. #13
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Oui il semblerait en effet
    Bon le sujet est résolu alors merci pour ton aide

  14. #14
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Je t'en prie

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

Discussions similaires

  1. [EDI] Quel est l'éditeur que vous recommandez pour PHP ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 400
    Dernier message: 10/04/2018, 20h08
  2. Réponses: 22
    Dernier message: 23/05/2013, 12h40
  3. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  4. [NoSQL] quel est l'avantage pour nos appli tradionnelles?
    Par valkeke dans le forum Autres SGBD
    Réponses: 16
    Dernier message: 03/02/2012, 13h58
  5. [FLASH] Quel est l'avantage?
    Par ghyosmik dans le forum Flash
    Réponses: 2
    Dernier message: 31/12/2005, 01h27

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