面试题答案
一键面试错误产生原因
这个错误表示在Rust代码中,你尝试访问一个长度为5的集合(如数组、向量等),但使用的索引是7 。在Rust中,集合的索引是从0开始的,所以合法的索引范围是0到集合长度减1。这里集合长度为5,合法索引范围是0到4。使用panic!
宏后出现此错误,意味着代码中存在对集合越界访问的操作。
避免这种错误的方法
- 边界检查:在访问集合元素前,手动检查索引是否在合法范围内。例如,对于向量
vec
:
let vec = vec![1, 2, 3, 4, 5];
let index = 7;
if index < vec.len() {
let value = vec[index];
println!("The value at index {} is {}", index, value);
} else {
println!("Index out of bounds");
}
- 使用
get
方法:许多集合类型(如Vec
)提供了get
方法,它不会导致panic
,而是在索引越界时返回None
。
let vec = vec![1, 2, 3, 4, 5];
let index = 7;
if let Some(value) = vec.get(index) {
println!("The value at index {} is {}", index, value);
} else {
println!("Index out of bounds");
}
- 迭代器:如果只是遍历集合,尽量使用迭代器而不是索引访问。迭代器会自动处理边界问题,不会出现越界情况。
let vec = vec![1, 2, 3, 4, 5];
for value in vec.iter() {
println!("{}", value);
}