C++ Vettori concatenanti


Esempio

Uno std::vector può essere aggiunto a un altro utilizzando la funzione membro 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());

Tuttavia, questa soluzione non riesce se si tenta di aggiungere un vettore a se stesso, poiché lo standard specifica che gli iteratori dati a insert() non devono essere dello stesso intervallo degli elementi dell'oggetto destinatario.

c ++ 11

Invece di utilizzare le funzioni membro del vettore, è possibile utilizzare le funzioni std::begin() e std::end() :

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

Questa è una soluzione più generale, ad esempio, perché b può anche essere una matrice. Tuttavia, anche questa soluzione non ti consente di aggiungere un vettore a se stesso.

Se l'ordine degli elementi nel vettore ricevente non ha importanza, considerando il numero di elementi in ciascun vettore è possibile evitare operazioni di copia non necessarie:

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