Вам необходимо использовать back_inserter:
std::copy(input.begin(), input.end(), std::back_inserter(output));
std::copyне добавляет элементы в контейнер, в который вы вставляете: он не может; в контейнере есть только итератор. Из-за этого, если вы передаете выходной итератор напрямую std::copy, вы должны убедиться, что он указывает на диапазон, по крайней мере достаточно большой, чтобы содержать входной диапазон.
std::back_inserterсоздает выходной итератор, который вызывает push_backконтейнер для каждого элемента, поэтому каждый элемент вставляется в контейнер. В качестве альтернативы, вы могли бы создать достаточное количество элементов в, std::vectorчтобы содержать копируемый диапазон:
std::vector<double> output(input.size());
std::copy(input.begin(), input.end(), output.begin());
Или вы можете использовать std::vectorконструктор диапазона:
std::vector<double> output(input.begin(), input.end());
assign()функция:output.assign(input.begin(), input.end());