2010-03-06 6 views
2
struct Group 
{ 
    Group(string _N, set <string> M_) 
    {Name = N_; Member = M_} 
    string Name; 
    set <string> Members; 
}; 

int main() 
{ 
    list <Group> GroupList; 
    set <string> Members; 

    //collect the members from a file and add to set 

    GroupList.pushback(Group(Name, Members)); 

} 

Y at-il une façon moins gourmande en mémoire d'ajouter les membres au groupe au lieu de passer l'ensemble au constructeur?Ajout d'une structure à std :: list

Édition: Renommé les variables commençant par un trait de soulignement.

+1

Renommez vos paramètres. Tous les noms commençant par underscore suivis de majuscules sont réservés. – jalf

Répondre

3

Vous pouvez passer une référence, puis faire une liste et copie l'initialisation d'utilisation, même avec la chaîne.

Group(const string& n, const set <string>& m) 
: Name(n), Members(m) {} 
+3

Ne fait pas de mal à les rendre const ref paramètres non plus. –

+0

ok, j'y allais à la première place, mais ensuite je me suis trompé de penser à la référence comme un pointeur. Je pensais que cela pourrait aussi changer l'ensemble dans GroupList mais la variable Members dans struct n'est pas un pointeur :) – cpx

1

En ajoutant un élément vide et permuter l'ensemble, vous évitez la copie intermédiaire.

GroupList.pushback(Group()); 
swap(GroupList.back().Members, Members); 
Questions connexes