Why can’t I use d_arr.begin() as the OutputIt in std::copy when the underlying vector has sufficient capacity?
Because the destination vector is empty, and thus
std::copy overflows the vector (because assignment of any element is outside the bounds of an empty vector).
Is the std::back_inserter() operation optimized to just memmove
It could be. It might even be optimised to something faster.
Is use std::back_inserter() optimized to bulk copy ranges?
Given smart enough optimiser, yes.
Using the appropriate constructor of vector would be simpler than
std::copy. Both for the reader of the code, and the optimiser.
CLICK HERE to find out more related problems solutions.