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 : 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;
};
On pourrait initialiser le vecteur de la manière suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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++); });
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.