Quel est le moyen le plus simple de convertir un tableau en vecteur?

Quel est le moyen le plus simple de convertir un tableau en vecteur?

void test(vector _array) { ... } int x[3]={1, 2, 3}; test(x); // Syntax error. 

Je veux convertir x du tableau int au vecteur de la manière la plus simple.

Utilisez le constructeur vector qui prend deux iterators, notez que les pointeurs sont des iterators valides et utilisez la conversion implicite des tableaux en pointeurs:

 int x[3] = {1, 2, 3}; std::vector v(x, x + sizeof x / sizeof x[0]); test(v); 

ou

 test(std::vector(x, x + sizeof x / sizeof x[0])); 

sizeof x / sizeof x[0] est évidemment 3 dans ce contexte; c’est le moyen générique d’obtenir le nombre d’éléments dans un tableau. Notez que x + sizeof x / sizeof x[0] pointe un élément audelà du dernier élément.

Personnellement, j’apprécie beaucoup l’approche C ++ 2011 car elle ne nécessite ni l’utilisation de sizeof() ni de se souvenir d’ajuster les limites du tableau si vous modifiez les limites du tableau (et vous pouvez définir la fonction appropriée dans C ++ 2003 si vous veux aussi):

 #include  #include  int x[] = { 1, 2, 3, 4, 5 }; std::vector v(std::begin(x), std::end(x)); 

De toute évidence, avec C ++ 2011, vous pouvez utiliser des listes d’initialisation:

 std::vector v({ 1, 2, 3, 4, 5 }); 

Les pointeurs peuvent être utilisés comme tous les autres iterators:

 int x[3] = {1, 2, 3}; std::vector v(x, x + 3); test(v) 

Vous posez la mauvaise question ici – au lieu de tout forcer dans un vecteur, demandez comment vous pouvez convertir le test pour qu’il fonctionne avec des iterators au lieu d’un conteneur spécifique. Vous pouvez également fournir une surcharge afin de conserver la compatibilité (et gérer les autres conteneurs simultanément):

 void test(const std::vector& in) { // Iterate over vector and do whatever } 

devient:

 template  void test(Iterator begin, const Iterator end) { // Iterate over range and do whatever } template  void test(const Container& in) { test(std::begin(in), std::end(in)); } 

Ce qui vous permet de faire:

 int x[3]={1, 2, 3}; test(x); // Now correct 

( Démo Ideone )