小编典典

std :: copy是否处理重叠范围?

algorithm

将数据从一个范围复制到另一个范围时,如果源范围和目标范围之间存在部分重叠,则必须小心。如果目标范围的开头与源范围的结尾重叠,则普通的顺序副本将使数据乱码。C运行时库具有memmovememcpy处理这种重叠的问题。

我假设std::copy工作类似memcpy,因为它不会考虑源区域和目标区域之间的重叠。如果您尝试在std::vectorwith
std::copy中将对象“下移” ,则会破坏数据。是否有类似STL的算法memmove来处理这种情况?还是应该使用反向迭代器自己滚动?


阅读 396

收藏
2020-07-28

共1个答案

小编典典

如果输出范围的 开头 与输入范围重叠,则它不处理重叠范围。

幸运的是,您可以
std::copy_backward
改用(这要求您不要将输出范围的 末端 与输入范围重叠)。

2020-07-28