Trao đổi các giá trị tại hai vị trí có thể thay đổi cùng loại, mà không cần khởi tạo hoặc sao chép một trong hai giá trị đó.Công việc `std :: mem :: swap` hoạt động như thế nào?
use std::mem; let x = &mut 5; let y = &mut 42; mem::swap(x, y); assert_eq!(42, *x); assert_eq!(5, *y);
(Từ offical Rust doc)
Làm thế nào hai giá trị có thể được hoán đổi mà không cần sao chép? Giá trị 42
hoạt động như thế nào từ y
đến x
? Điều này không thể thực hiện được.
Tôi đặt cược bạn chưa bao giờ nghe nói về [lừa xor triple] (https: // en .wikipedia.org/wiki/XOR_swap_algorithm), là một câu đố phổ biến trong các cuộc phỏng vấn mã hóa. Không chắc chắn nếu thư viện chuẩn thực hiện nó theo cách này hay không .. – vincentleest
Tôi nhớ lại trong những ngày lắp ráp mà thực hiện một số câu lệnh XOR có thể trao đổi dữ liệu mà không cần một không gian bộ nhớ thứ ba để sao chép vào. Tôi không chắc chắn đó là những gì "trao đổi" sử dụng tuy nhiên. có lẽ bạn có thể xem hội đồng? https://en.wikipedia.org/wiki/XOR_swap_algorithm – Sunsetquest
Đã nghe nói về nó :) – Kapichu