Вам потрібно використовувати 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());