[C++] Agregar un vector a un vector



Answers

std::copy (b.begin(), b.end(), std::back_inserter(a));

Esto puede usarse en caso de que los elementos del vector a no tengan un operador de asignación (por ejemplo, un miembro const).

En todos los demás casos, esta solución es ineficaz en comparación con la solución de inserción anterior.

Question

Esta pregunta ya tiene una respuesta aquí:

Suponiendo que tengo 2 vectores estándar:

vector<int> a;
vector<int> b;

Digamos también que ambos tienen alrededor de 30 elementos.

  • ¿Cómo agrego el vector b al final del vector a?

La manera sucia sería iterar a través de b y agregar cada elemento a través del vector<int>::push_back() , ¡aunque no me gustaría hacer eso!




Si desea agregar vector a sí mismo, fallarán ambas soluciones populares:

std::vector<std::string> v, orig;

orig.push_back("first");
orig.push_back("second");

// BAD:
v = orig;
v.insert(v.end(), v.begin(), v.end());
// Now v contains: { "first", "second", "", "" }

// BAD:
v = orig;
std::copy(v.begin(), v.end(), std::back_inserter(v));
// std::bad_alloc exception is generated

// GOOD, but I can't guarantee it will work with any STL:
v = orig;
v.reserve(v.size()*2);
v.insert(v.end(), v.begin(), v.end());
// Now v contains: { "first", "second", "first", "second" }

// GOOD, but I can't guarantee it will work with any STL:
v = orig;
v.reserve(v.size()*2);
std::copy(v.begin(), v.end(), std::back_inserter(v));
// Now v contains: { "first", "second", "first", "second" }

// GOOD (best):
v = orig;
v.insert(v.end(), orig.begin(), orig.end()); // note: we use different vectors here
// Now v contains: { "first", "second", "first", "second" }





Links