golang中可创建指定长度的切片,Rust中的Vec只能在创建时指定容量。
let v: Vec<i32> = Vec::with_capacity(3);
println!("{}", v[2]);// index out of bounds
Unsafe 的 set_len()
let mut v: Vec<i32> = Vec::new();
unsafe { v.set_len(3); }
println!("v:{}", v[2]);// SIGSEGV, 段错误
点进去发现,
/// Sets the length of a vector.
///
/// This will explicitly set the size of the vector, without actually
/// modifying its buffers, so it is up to the caller to ensure that the
/// vector is actually the specified size.
因此实用 set_len
需要确保容量
let mut v: Vec<i32> = Vec::with_capacity(3);
unsafe { v.set_len(3); }
println!("v:{}", v[2]); // v:0
通过 vec!
宏创建
let v = vec![0;10];
通过 std::vec::from_elem
创建
let v = std::vec::from_elem(0, 10);