Rust 學習筆記:關于 HashMap 的練習題
- Rust 學習筆記:關于 HashMap 的練習題
- 以下代碼能否通過編譯?若能,輸出是?
- 以下代碼能否通過編譯?若能,輸出是?
Rust 學習筆記:關于 HashMap 的練習題
以下代碼能否通過編譯?若能,輸出是?
use std::collections::HashMap;fn main() {let mut h = HashMap::new();h.insert("k1", 0);let v1 = &h["k1"];h.insert("k2", 1);let v2 = &h["k2"];println!("{} {}", v1, v2);
}
不能通過編譯。v1 持有了不可變引用導致第二次 insert 報錯。
insert() 是對 HashMap 的可變借用,而 &[] 是對 HashMap 的不可變借用,如果兩個借用的作用域有交疊的話就可能引發潛在的內存安全問題。
以下代碼能否通過編譯?若能,輸出是?
use std::collections::HashMap;fn main() {let mut h: HashMap<char, Vec<usize>> = HashMap::new();for (i, c ) in "hello!".chars().enumerate() {h.entry(c).or_insert(Vec::new()).push(i);}let mut sum = 0;for i in h.get(&'l').unwrap() {sum += *i;}println!("{}", sum);
}
可以通過編譯。輸出 5。