Khi sao chép dữ liệu từ một phạm vi này sang phạm vi khác, bạn phải cẩn thận nếu có chồng chéo một phần giữa phạm vi nguồn và đích. Nếu phần đầu của phạm vi đích trùng lặp đuôi của phạm vi nguồn, một bản sao tuần tự đơn giản sẽ thu thập dữ liệu. Thư viện thời gian chạy C có memmove
ngoài memcpy
để xử lý các vấn đề trùng lặp đó.Có std :: copy xử lý các phạm vi chồng chéo?
Tôi giả định std::copy
hoạt động như memcpy
, ở chỗ nó không trả bất kỳ liên quan đến chồng chéo giữa vùng nguồn và đích. Nếu bạn cố gắng chuyển các đối tượng "xuống" trong một số std::vector
với std::copy
, bạn sẽ làm hỏng dữ liệu. Có một thuật toán tương tự STL của memmove
để xử lý các tình huống như thế này không? Hoặc tôi nên cuộn của riêng tôi với iterators ngược?
'std :: copy_backward' sẽ hữu ích khi cố gắng triển khai và tương tự' memmove'. Tôi muốn kiểm tra gánh nặng chồng lên nhau của người gọi. –