Comment initialiser un vecteur en C ++

Duplication possible:
C ++: méthode la plus simple pour initialiser un vecteur STL avec des éléments codés en dur

Je veux initialiser un vecteur comme nous le faisons dans le cas d’un tableau.

Exemple

int vv[2] = {12, 43}; 

Mais quand je le fais comme ça,

 vector v(2) = {34, 23}; 

OU

 vector v(2); v = {0, 9}; 

cela donne une erreur:

expression primaire attendue avant le jeton ‘{‘

ET

erreur: attendu ‘,’ ou ‘;’ avant ‘=’ jeton

respectivement.

Avec le nouveau standard C ++ (il peut être nécessaire d’activer des indicateurs spéciaux sur votre compilateur), vous pouvez simplement:

 std::vector v { 34,23 }; // or // std::vector v = { 34,23 }; 

Ou même:

 std::vector v(2); v = { 34,23 }; 

Sur les compilateurs qui ne supportent pas cette fonctionnalité (listes d’initialisation), vous pouvez émuler ceci avec un tableau:

 int vv[2] = { 12,43 }; std::vector v(&vv[0], &vv[0]+2); 

Ou, pour le cas d’une affectation à un vecteur existant:

 int vv[2] = { 12,43 }; v.assign(&vv[0], &vv[0]+2); 

Comme James Kanze l’a suggéré, il est plus robuste d’avoir des fonctions qui vous donnent le début et la fin d’un tableau:

 template  T* begin(T(&arr)[N]) { return &arr[0]; } template  T* end(T(&arr)[N]) { return &arr[0]+N; } 

Et puis vous pouvez le faire sans avoir à répéter la taille partout:

 int vv[] = { 12,43 }; std::vector v(begin(vv), end(vv)); 

Vous pouvez aussi faire comme ceci:

 template  class make_vector { public: typedef make_vector my_type; my_type& operator<< (const T& val) { data_.push_back(val); return *this; } operator std::vector() const { return data_; } private: std::vector data_; }; 

Et l’utiliser comme ça:

 std::vector v = make_vector() << 1 << 2 << 3;