Czy to samo co String
i &str
?
Tak. A Vec<T>
jest własnością wariantu &[T]
. &[T]
jest numerem referencyjnym odniesienia do zestawu T
rozmieszczonymi sekwencyjnie w pamięci (a.k.a. wycinek). Reprezentuje wskaźnik do początku elementów i liczby elementów. Odwołanie odnosi się do czegoś, co nie należy do Ciebie, więc zestaw działań, które możesz z nim zrobić, jest ograniczony. Istnieje wariant zmienny (&mut [T]
), który umożliwia mutowanie elementów w plasterku. Nie można zmienić liczby w plasterku. Mówiąc inaczej, nie możesz zmutować samego plastra.
wziąć &[u8]
i uczynić z niego Vec
Dla ten konkretny przypadek:
let s: &[u8]; // Set this somewhere
Vec::from(s);
Jednak to musi przydzielić pamięć nie na stosie, a następnie kopiowania każdą wartość do tej pamięci. Jest droższy niż w inny sposób, ale może być odpowiedni dla danej sytuacji.
lub odwrotnie
let v = vec![1u8, 2, 3];
let s = v.as_slice();
Jest to w zasadzie "free", jak v
nadal posiada dane, jesteśmy po prostu rozdawać odniesienie do niej. Dlatego wiele interfejsów API próbuje robić plasterki, gdy ma to sens.