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