Você precisa usar um back_inserter
:
std::copy(input.begin(), input.end(), std::back_inserter(output));
std::copy
não adiciona elementos ao contêiner no qual você está inserindo: não pode; ele possui apenas um iterador no contêiner. Por esse motivo, se você passar diretamente um iterador de saída std::copy
, verifique se ele aponta para um intervalo que seja pelo menos grande o suficiente para manter o intervalo de entrada.
std::back_inserter
cria um iterador de saída que chama push_back
um contêiner para cada elemento, para que cada elemento seja inserido no contêiner. Como alternativa, você poderia ter criado um número suficiente de elementos std::vector
para manter o intervalo que está sendo copiado:
std::vector<double> output(input.size());
std::copy(input.begin(), input.end(), output.begin());
Ou você pode usar o std::vector
construtor range:
std::vector<double> output(input.begin(), input.end());
assign()
função:output.assign(input.begin(), input.end());