Вам необходимо использовать 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());