Necesitas usar un back_inserter
:
std::copy(input.begin(), input.end(), std::back_inserter(output));
std::copy
no agrega elementos al contenedor en el que está insertando: no puede; solo tiene un iterador en el contenedor. Debido a esto, si pasa un iterador de salida directamente std::copy
, debe asegurarse de que apunte a un rango que sea al menos lo suficientemente grande como para contener el rango de entrada.
std::back_inserter
crea un iterador de salida que llama push_back
a un contenedor para cada elemento, por lo que cada elemento se inserta en el contenedor. Alternativamente, podría haber creado un número suficiente de elementos en el std::vector
para mantener el rango que se copia:
std::vector<double> output(input.size());
std::copy(input.begin(), input.end(), output.begin());
O bien, puede usar el std::vector
constructor de rango:
std::vector<double> output(input.begin(), input.end());
assign()
función:output.assign(input.begin(), input.end());