将数据从一个范围复制到另一个范围时,如果源范围和目标范围之间存在部分重叠,则必须小心。如果目标范围的开头与源范围的结尾重叠,则普通的顺序副本将使数据乱码。C运行时库具有memmove除memcpy处理这种重叠的问题。
memmove
memcpy
我假设std::copy工作类似memcpy,因为它不会考虑源区域和目标区域之间的重叠。如果您尝试在std::vectorwith std::copy中将对象“下移” ,则会破坏数据。是否有类似STL的算法memmove来处理这种情况?还是应该使用反向迭代器自己滚动?
std::copy
std::vector
如果输出范围的 开头 与输入范围重叠,则它不处理重叠范围。
幸运的是,您可以 std::copy_backward 改用(这要求您不要将输出范围的 末端 与输入范围重叠)。
std::copy_backward