std :: copy copy, используя оператор присваивания аргументов ("=") или конструктор копирования аргументов (это, вероятно, зависит от реализации, сейчас я не уверен).Он ничего не делает, только перебирает диапазон, начинающийся с param.begin () до param.end (), и делает что-то вроде:
while (first!=last) *result++ = *first++;
Таким образом, вам нужно самостоятельно выделить необходимую память.В противном случае это приведет к неопределенному поведению.
Можно ли копировать вектор констант в массив таким образом?Зависит от того, что вы хотите сделать.Как правило, это нормально, поскольку значения передаются в цель по значению, а не по ссылке, следовательно, правильность const не нарушается.
Например, это прекрасно работает:
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
const std::vector<int> constvec(vec);
int *arrray = new int[2];
std::copy(constvec.begin(),constvec.end(),arrray);