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 sur un vector<Struct>


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut Assign sur un vector<Struct>
    Bonjour à tous.

    Ma question porte sur l'utilisation de Assign dans le cadre de l'initialisation d'un vector de structures.

    Voici ce que je veux remplir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct S
    {
        int a;
        std::string b;
    };
     
    typedef std::vector<S> Liste;
     
    Liste aremplir;
    et j'aimerais écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    using namespace boost::assign;
     
    aremplir += {1,"toto"},{2,"titi"} ...; // expected primary-expression before '{' token
    Et donc, comme indiqué ci-dessus, cela ne compile pas.

    L'idée c'est en fait de mettre de grosses quantités de constantes de façon lisible et facilement modifiables.

    Si je voulais faire pareil avec un tableau (plutot qu'un vector), j'écrirais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    S aremplirmaismoinsbien[] = 
    {
    	{1,"toto"},
    	{2,"titi"},
    	{3,"tata"},
    	...
    };
    Merci à ceux qui pourront m'aider

    [EDIT]
    il se trouve que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    template <class V, class A, class V2)
    ...
    boost::assign::operator+= (std::vector<V,A>&c, V2 v)
    {
    	return push_back(c)(v);
    }
    [/EDIT]

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Je up ce topic car il tombe en plein dans l'article que je suis en train d'écrire sur boost::assign.

    Voici un code qui marche et qui fait à peu de chose près ce que tu souhaite
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    #include <vector>
    #include <iostream>
    #include <string>
    #include <boost/assign.hpp>
     
    using namespace boost::assign;
    using namespace std;
     
    class S
    {
        int a;
        std::string b;
    public:
        friend std::ostream& operator<<(std::ostream& flx, const S& s);
        S(int a_,std::string b_):a(a_),b(b_){}
     
    };
     
    std::ostream& operator<<(std::ostream& flx, const S& s)
    {
        flx<<s.a<<" "<<s.b;
     
        return flx;
    }
     
    int main()
    {
     
        std::vector<S> array1;
     
        push_back(array1)(1,"toto")(2,"titi")(3,"tata");
     
        int size=array1.size();
     
        cout<<"s: "<<size<<endl;
        for(int i=0;i<size;i++)
    	cout<<array1[i]<<endl;
     
        return 0;	
    }
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Hey merci !!

    Depuis le temps, je ne sais plus pour quel projet j'avais besoin de ça, mais ce qui est sur c'est que le problème se pose régulièrement.

    Du coup, ça me sera bien utile la prochaine fois.

  4. #4
    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
    Bah il faut juste avoir les constructeurs adaptés, ça semble évident...

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

Discussions similaires

  1. attribut référence sur un vector
    Par youhil dans le forum SL & STL
    Réponses: 2
    Dernier message: 28/05/2006, 20h27
  2. Question sur les vectors
    Par Pragmateek dans le forum SL & STL
    Réponses: 28
    Dernier message: 13/05/2006, 14h55
  3. Réponses: 15
    Dernier message: 20/09/2005, 09h54
  4. std::sort() sur std::vector()
    Par tut dans le forum SL & STL
    Réponses: 20
    Dernier message: 05/01/2005, 19h15
  5. [debutant STL] question sur les vectors
    Par killerjeff dans le forum SL & STL
    Réponses: 13
    Dernier message: 19/08/2004, 17h32

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