При копировании данных из одного диапазона в другой вы должны быть осторожны, если частичное перекрытие между диапазонами источника и получателя. Если начало диапазона назначения перекрывает хвост исходного диапазона, простая последовательная копия будет искажать данные. Библиотека времени выполнения C имеет memmove
в дополнение к memcpy
для обработки таких проблем с перекрытием.
Я предполагаю, что std::copy
работает как memcpy
, поскольку он не учитывает совпадения между регионами-источниками и получателями. Если вы попытаетесь переместить объекты "вниз" в std::vector
с помощью std::copy
, вы повредите данные. Есть ли алгоритм алгоритма STL memmove
для обработки таких ситуаций? Или я должен рулон с помощью обратных итераторов?