C++ Vecteurs concaténants


Exemple

Un std::vector peut être ajouté à un autre en utilisant la fonction membre insert() :

std::vector<int> a = {0, 1, 2, 3, 4};
std::vector<int> b = {5, 6, 7, 8, 9};

a.insert(a.end(), b.begin(), b.end());

Cependant, cette solution échoue si vous essayez d’ajouter un vecteur à lui-même, car le standard spécifie que les itérateurs donnés à insert() ne doivent pas appartenir à la même plage que les éléments de l’objet récepteur.

c ++ 11

Au lieu d'utiliser les fonctions membres du vecteur, les fonctions std::begin() et std::end() peuvent être utilisées:

a.insert(std::end(a), std::begin(b), std::end(b));

C'est une solution plus générale, par exemple, car b peut également être un tableau. Cependant, cette solution ne vous permet pas non plus d'ajouter un vecteur à lui-même.

Si l'ordre des éléments dans le vecteur de réception n'a pas d'importance, compte tenu du nombre d'éléments dans chaque vecteur peut éviter des opérations de copie inutiles:

if (b.size() < a.size())
  a.insert(a.end(), b.begin(), b.end());
else
  b.insert(b.end(), a.begin(), a.end());