Skip to content

Iterator会不会越界

约 207 字小于 1 分钟

rustinterator

2025-06-10

rust 中迭代器(Iterator)会将指向位置的前一个位置返回

那么当返回最后一个值的时候会不会发生越界行为呢? 答:不会

因为:Rust 的迭代器是先返回当前值,然后再移动位置的,一旦检测到指向数组的结束指针就返回 none

✅ 顺序总结(以 .next() 为例)

  1. 检查当前是否到末尾

    • 如果已经到结尾,就返回 None
  2. 保存当前的位置

  3. 移动位置指针(准备下一次)

  4. 返回保存的当前值(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 })     // 返回当前值
         }
     }
 }