Considérese el siguiente programa que inserta una serie de elementos en un vector:¿Hay una forma estándar de mover un rango en un vector?
vector<string> v1;
vector<string> v2;
v1.push_back("one");
v1.push_back("two");
v1.push_back("three");
v2.push_back("four");
v2.push_back("five");
v2.push_back("six");
v1.insert(v1.end(), v2.begin(), v2.end());
Este eficientemente copias de la gama, la asignación de espacio suficiente en el vector objetivo para toda la gama de modo que se requiere un máximo de un cambio de tamaño . Ahora considere el siguiente programa que intenta mover un rango en un vector:
vector<string> v1;
vector<string> v2;
v1.push_back("one");
v1.push_back("two");
v1.push_back("three");
v2.push_back("four");
v2.push_back("five");
v2.push_back("six");
for_each (v2.begin(), v2.end(), [&v1](string & s)
{
v1.emplace_back(std::move(s));
});
Esto lleva a cabo un movimiento acertado, pero no disfrutar de los beneficios que se insertan() tiene con respecto a preasignar espacio en el vector objetivo, por lo el vector podría cambiar de tamaño varias veces durante la operación.
Entonces mi pregunta es, ¿existe un inserto equivalente que pueda mover un rango en un vector?
Si necesita preasignar espacio en el vector, use 'std :: vector :: reserve', y mantenga' push_back'/'emplace_back'. – rubenvb
@rubenvb Sí, pensé que esa sería probablemente la respuesta, es una lástima que no haya un método tan limpio como 'insert()'. – Benj
Eso sería una optimización opcional, solo posible cuando el rango está definido por iteradores de acceso aleatorio. No cuentes con eso –