Rust(9) - Vector
Rust vector 類似 C++ 的 vector,超出 capacity 時會重新要求記憶體。需要注意的是當你的變數引用 vector 的元素參照時 Rust 會不讓你去修改 vector。
1. 宣告 Vector:
建立空向量。
fn main() { let v = vec![]; println!("v: {:?}", v); }
建立空向量並初始化內容。
fn main() { let v = vec![1, 2, 3, 4, 5]; println!("v: {:?}", v); }
利用 template,聲明元素型別。
let v: Vec<i32> = vec![];
2. 添加元素:
利用 push 可以將值推入 mutable vector 的尾端。
fn main() { let mut v: Vec<i32> = vec![]; for it in 1..10 { v.push(it); } println!("v: {:?}", v); }
3. 索引取值:
n 是 v 中元素的拷貝,所以可以變更 vector。
fn main() { let mut v = vec![1,2,3,4,5]; let n = v[0]; // 拷貝 v.push(6); println!("v: {:?}", v); println!("n: {}", n); }
n 參照的是 v[0] 本身。考慮 capacity 不足時 vector 會要求更多的記憶體將資料拷貝到新的位址,Rust 會避免元素被其他變數引用時變更記憶體所以會報錯。
fn main() { let mut v = vec![1,2,3,4,5]; let n = &v[0]; // 借用 v[0] v.push(6); println!("v: {:?}", v); println!("n: {}", n); }
get 方法會回傳一個 Optional,可以用來確保索引的全性。
fn main() { let v = vec![1,2,3,4,5]; match v.get(100) { Some(val) => println!("val: {}", val), _ => (), } }
4. Iteration:
可以透過 vector 的 iter 及 iter_mut 方法遍歷元素。
修改 mutable 向量時要先解引。
fn main() { let mut v = vec![1,2,3,4,5]; for it in v.iter() { println!("{}", it); } println!("v: {:?}", v); for it in v.iter_mut() { *it = *it+ 2; println!("{}", it); } println!("v: {:?}", v); }
留言
張貼留言