Rust 学习笔记:关于 HashMap 的练习题
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。