Bonjour tout le monde,
Par curiosité, je me demandais s'il existait dans la STL un moyen d'initialiser un std::vector avec différentes valeurs lors de la création de celui-ci.
Voici un petit exemple de ce que j'avais en tête:
Soit une classe/structure Foo:
On pourrait initialiser le vecteur de la manière suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 struct Foo { Foo(int _val = -1) : val(_val), atest(false); int val; bool atest; };
Ce code ne fonctionne pas bien évidemment mais est quand même très proche de celui-ci qui est fonctionnel (en C++11):
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::vector<Foo> fooVec(200, [x = 0]() mutable { return Foo(x++); });
L'inconvéniant ici c'est qu'il y a un parcours du vecteur qui est fait en plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #include <algorithm> std::vector<Foo> fooVec(200); std::generate(fooVec.begin(), fooVec.end(), [x = 0] () mutable { return Foo(x++); });
J'ai vu également ici que l'on peut utiliser des itérateurs mais je trouve qu'il y a beaucoup de code pour pas grand chose.
Partager