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。