std::vector et allocation avec valeurs différentes
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:
Code:
1 2 3 4 5 6 7
| struct Foo
{
Foo(int _val = -1) : val(_val), atest(false);
int val;
bool atest;
}; |
On pourrait initialiser le vecteur de la manière suivante:
Code:
std::vector<Foo> fooVec(200, [x = 0]() mutable { return Foo(x++); });
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:
1 2 3
| #include <algorithm>
std::vector<Foo> fooVec(200);
std::generate(fooVec.begin(), fooVec.end(), [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.
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.