Wenn Sie Daten von einem Bereich in einen anderen kopieren, müssen Sie vorsichtig sein, wenn sich der Quell- und der Zielbereich teilweise überschneiden. Wenn der Anfang des Zielbereichs mit dem Ende des Quellbereichs überlappt, werden die Daten bei einer einfachen sequenziellen Kopie unverfälscht. Die C-Laufzeitbibliothek hat memmove
zusätzlich zu memcpy
, um solche Überlappungsprobleme zu behandeln.Behandelt std :: copy überlappende Bereiche?
Ich gehe davon aus, std::copy
funktioniert wie memcpy
, in dem es keine Rücksicht auf die Überlappung zwischen den Quell-und Zielregionen zahlt. Wenn Sie versuchen, Objekte in einem std::vector
mit std::copy
"nach unten" zu verschieben, werden Sie die Daten beschädigen. Gibt es einen STL-Algorithmus analog zu memmove
, um Situationen wie diese zu behandeln? Oder sollte ich selbst mit umgekehrten Iteratoren rollen?
'std :: copy_backward' wäre hilfreich bei der Implementierung von 'memmove' und analog dazu. Ich möchte die Prüfung auf Überlappungslast vom Anrufer nehmen. –