Zamień wartości na dwie zmienne lokalizacje tego samego typu, bez deinicjalizacji lub kopiowania jednego z nich.Jak działa `std :: mem :: swap`?
use std::mem; let x = &mut 5; let y = &mut 42; mem::swap(x, y); assert_eq!(42, *x); assert_eq!(5, *y);
(Od offical Rust doc)
Jak dwie wartości mają zostać zamienione bez kopiowania? Jak zmieniła się wartość 42
z y
na x
? To nie powinno być możliwe.
Założę się, że nigdy nie słyszał o potrójnym [xor podstęp] (https: // pl .wikipedia.org/wiki/XOR_swap_algorithm), który jest popularną ciekawostką w wywiadach kodujących. Nie jestem pewien, czy standardowa biblioteka implementuje je w ten czy inny sposób. – vincentleest
Pamiętam z powrotem w dniach montażu, że wykonanie kilku instrukcji XOR może zamienić dane bez trzeciej pamięci do skopiowania. Nie jestem pewien, czy to właśnie wykorzystuje "zamiana". może możesz obejrzeć montaż? https://en.wikipedia.org/wiki/XOR_swap_algorithm – Sunsetquest
Tak, już o tym słyszałem :) – Kapichu