c++ Anexando un vector a un vector





2 Answers

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

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

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

c++ stl vector

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 forma sucia sería iterar a través de b y agregar cada elemento a través de vector<int>::push_back() , ¡aunque no me gustaría hacerlo!




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

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" }



Related


Tags

c++   stl   vector