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