copy_n和copy之间的区别

use*_*678 1 c++ difference

以下的区别?哪一个有未定义的行为?都?

std::copy_n(asdf.begin(), asdf.size(), asdf.begin());
std::copy(asdf.begin(), asdf.end(), asdf.begin());
Run Code Online (Sandbox Code Playgroud)

假设a std::vector<int>给出了函数.有些人说的话,这两个功能并不相同.

这是标准中的缺陷吗?

Ben*_*ley 5

std::copy_n(asdf.begin(), asdf.size(), asdf.begin());
Run Code Online (Sandbox Code Playgroud)

这不是未定义的行为.copy_n只需要[first, first + n)[result, result + n)有效范围.通过你已经通过的论据,你已经保证了它们.(我假设asdf是一个标准容器,或具有类似行为的容器.我还假设包含的类型具有良好的赋值运算符)

std::copy(asdf.begin(), asdf.end(), asdf.begin());
Run Code Online (Sandbox Code Playgroud)

这有未定义的行为.因为std::copy,result不得在范围内[first, last)