copy_n和copy之间的区别

时间:2015-03-05 01:10:54

标签: c++ difference

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

std::copy_n(asdf.begin(), asdf.size(), asdf.begin());
std::copy(asdf.begin(), asdf.end(), asdf.begin());

假设给函数std::vector<int>。而且这两个功能并不像有些人所说的那样。

这是标准中的缺陷吗?

1 个答案:

答案 0 :(得分:5)

std::copy_n(asdf.begin(), asdf.size(), asdf.begin());

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

std::copy(asdf.begin(), asdf.end(), asdf.begin());

这有未定义的行为。对于std::copyresult不得在[first, last)

范围内