Array and Slice
A slice is a kind of reference, so it does not have ownership. Slices are a view into a sequence of memory, contain a pointer and the size of view.
- String slices are
&str, also string literals are&strtoo.
Cheatsheet
let s = String::from("Hello world");
let hello = &s[0..5]; // or &s[..5]
let world = &s[6..11]; // or &s[6..]
let s: &str = "Hello world";
let arr = [1;5];
let slice = &arr[1..3];
slice.len();
slice.to_vec();
slice.iter();
slice[1];
slice.get(1);
Questions
What is the difference between [u8] and &[u8]
Ref. We cannot have a local variable with unknown size, so we must give a reference to
[u8].
let arr [u8; 10] = [0; 10];
let s = &arr[1..5]; // &[u8]
let v: Vec<_> = arr[1..5].iter().collect(); // no variable of [u8] created
What is the difference between pointer of an array and a slice
use std:mem;
let arr = [0; 500];
let arr_pointer = &arr;
let slice = &arr[..];
println!("size of arr: {} bytes", mem::size_of_val(&arr));
println!("size of arr pointer: {} bytes", mem::size_of_val(&arr_pointer));
println!("size of slice: {} bytes", mem::size_of_val(&slice));