Iterator会不会越界
rust 中迭代器(Iterator)会将指向位置的前一个位置返回
那么当返回最后一个值的时候会不会发生越界行为呢? 答:不会
因为:Rust 的迭代器是先返回当前值,然后再移动位置的,一旦检测到指向数组的结束指针就返回 none
✅ 顺序总结(以 .next()
为例)
检查当前是否到末尾:
- 如果已经到结尾,就返回
None
;
- 如果已经到结尾,就返回
保存当前的位置;
移动位置指针(准备下一次);
返回保存的当前值(
Some(value)
)。 例子:
impl<'a, T> Iterator for Iter<'a, T> {
fn next(&mut self) -> Option<&'a T> {
if self.ptr == self.end {
None
} else {
let old_ptr = self.ptr;
self.ptr = self.ptr.offset(1); // 安全地偏移
Some(unsafe { &*old_ptr }) // 返回当前值
}
}
}
版权所有
版权归属:pushme