Lorsque vous copiez des données d'une plage à une autre, vous devez veiller à ce qu'il y ait un chevauchement partiel entre les plages de source et de destination. Si le début de la plage de destination chevauche la fin de la plage de la source, une copie séquentielle simple déformera les données. La bibliothèque d'exécution C a memmove
en plus de memcpy
pour gérer de tels problèmes de chevauchement.Est-ce que std :: copy gère les plages de chevauchement?
Je suppose que std::copy
fonctionne comme memcpy
, en ce sens qu'il ne tient aucun compte du chevauchement entre les régions source et destination. Si vous essayez de déplacer des objets "vers le bas" dans un std::vector
avec std::copy
, vous corrompez les données. Existe-t-il un algorithme STL analogue à memmove
pour gérer des situations comme celle-ci? Ou devrais-je rouler le mien avec des itérateurs inversés?
'std :: copy_backward' serait utile en essayant de mettre en œuvre et analogue de' memmove'. Je veux prendre la vérification du fardeau de chevauchement de l'appelant. –