9
votes

Y a-t-il un moyen rapide de créer un ensemble?

Actuellement, je crée un nouveau jeu comme ceci: xxx

est un moyen de créer s en une ligne?


0 commentaires

6 Réponses :


8
votes

Vous pouvez consulter Boost.Assign , ce qui vous permet écrire des choses telles que: xxx


1 commentaires

Oui, vous pouvez! :) (tu m'as battu par 5 secondes ...)



4
votes

Vous voudrez peut-être jeter un oeil à Boost.Assign:

http://www.boost.org/ DOC / LIBS / 1_44_0 / LIBS / ASSIGN / DOC / INDEX.HTML


1 commentaires

C'est une bonne utilisation de l'opérateur de virgule surchargé: +1



19
votes
int myints[]= {10,20,30,40,50};
std::set<int> mySet(myints, myints + 5);
Ok, admittedly two lines :)

3 commentaires

Nice, +1 de moi. C'est encore plus facile avec Ces .


Si c'est disponible, alors je préfère ... mySet (myints, myints + _Countof (myINTS)) ...


Omettant lequel, vous pouvez utiliser myINTS + TIMPORTOF (MYINTS) / TIMITEOF (INT) .



3
votes

Voici une alternative C ++ 0X à la réponse de Moo-Juice pour le cas où la construction d'A est plus chère que pour int code>.

int myints[]= {10,20,30,40,50};
size_t total(sizeof(myints) / sizeof(int));

auto begin(std::make_move_iterator(myints));
auto end(std::make_move_iterator(myints + total));

std::set<int> mySet(begin, end);


1 commentaires

@ Moo-Juice - Oui, mais inspiré par votre version originale.



12
votes

in c ++ 0x La norme définit le Liste d'initialistes comme Une amélioration de ce type de construction (maladroit).

C'est beaucoup plus facile maintenant: P>

template <typename Value, typename Compare, typename Allocator>
set<Value, Compare, Allocator>::set(std::initializer_list<Value> list);


8 commentaires

Notez que de nos jours, avec C ++ 11, vous n'avez même pas besoin de déclarer ce constructeur.


@Claudiu: Je ne comprends pas bien ce que tu veux dire, j'ai peur.


Je veux dire que vous pouvez simplement faire std :: set set = {10, 20, 30, 40, 50}; dans votre code sans avoir à inclure Modèle Set :: Set (STD :: initialisizer_list liste); . EXDEONE EXEMPLE ICI .


@Claudiu: Oui, le constructeur de constructeur est fourni par l'ensemble (non par l'utilisateur), il est mentionné ici pour une exposition uniquement (pour exposer la fonctionnalité utilisée).


Ah je comprends maintenant. Je l'ai mal interprété les premières fois. Merci.


@Claudiu: Pas de soucis, pouvez-vous penser à quoi que ce soit pour rendre cette réponse plus claire? Si vous avez mal interprété, je ne serais pas surpris si les autres le faisaient aussi.


Peut-être que repharasez-la comme «tout ce qu'il a fallu était que la bibliothèque standard déclare le constructeur suivant pour se mettre:« ... »et toutes nos inquiétudes étaient soigneusement glissées.» Temps passé signifie que c'est déjà fait, pas quelque chose que je dois faire. Et la reformulation rend impossible de mal interpréter «Set» comme «vous» dans la première phrase, ce que j'ai fait.


@Claudiu: bonne idée! J'ai édité votre libellé. Merci de m'aider à améliorer cette réponse.