2010-03-15

473. Concatenar vectors STL en C++

Curiosament, l'STL no proveeix un operador de concatenació de vectors.
La manera estàndard de fer-ho és usar el mètode insert amb tres paràmetres dels vectors, així:

vector1.insert(vector1.end(), vector2.begin(), vector2.end());

Aquesta solució és l'òptima a nivell de compilació, però no ens permet, per exemple, crear un vector const i al constructor passar-li els dos vectors a concatenar.

Si no ens importa crear un vector temporal, aquesta petita plantilla (que podeu afegir a algun .h amb utilitats) us permet definir l'operador + com a concatenador de vectors, tot encapsulant aquest insert.

template<typename T> const vector<T>
operator+(const vector<T> &lhs, const vector<T> &rhs) {
    vector<T> temp = lhs;
    temp.insert(temp.end(), rhs.begin(), rhs.end());
    return temp;
}

I això us permet crear una concatenació al constructor:

const vector<int> v1(1,1);
const vector<int> v2(2,2);
const vector<int> v3 = v1 + v2;

D'aquesta manera la concatenació queda força més clara que fent servir insert.