目录

  1. 什么是 Rust 迭代器
  2. 为什么要使用迭代器
  3. 迭代器的基本概念
  4. 常用迭代器方法
  5. 自定义迭代器
  6. 代码示例
  7. 参考资料与出站链接

什么是 Rust 迭代器

Rust 迭代器是一种抽象机制,用于顺序访问集合(如数组、向量)的元素。它通过 Iterator trait 定义,提供了一种高效、函数式的遍历方式。


为什么要使用迭代器

  • 简洁性:替代传统循环,代码更清晰。
  • 功能强大:支持链式调用和函数式操作。
  • 安全性:避免手动索引的越界错误。
  • 性能:惰性求值,优化执行效率。

迭代器的基本概念

  • Iterator trait
  • 定义在 std::iter::Iterator
  • 核心方法:next(),返回 Option<Self::Item>
  • 分类
  • 迭代器生产者:如 iter()(借用)、into_iter()(消费)。
  • 迭代器消费者:如 collect()sum()
  • 惰性:迭代器方法仅在消费时执行。

常用迭代器方法

  1. 生产者
  • iter():不可变借用。
  • iter_mut():可变借用。
  • into_iter():获取所有权。
  1. 适配器(转换迭代器):
  • map():转换每个元素。
  • filter():筛选元素。
  • take(n):取前 n 个。
  1. 消费者(结束迭代):
  • collect():收集到集合。
  • sum():求和。
  • for_each():对每个元素执行操作。

自定义迭代器

  • 实现 Iterator trait:
  • 定义 Item 类型。
  • 实现 next() 方法。
struct Counter {
    count: u32,
}

impl Iterator for Counter {
    type Item = u32;
    fn next(&mut self) -> Option<Self::Item> {
        if self.count < 5 {
            self.count += 1;
            Some(self.count)
        } else {
            None
        }
    }
}

代码示例

基本迭代器

fn main() {
    let v = vec![1, 2, 3];
    for x in v.iter() {
        println!("{}", x);
    }
}

运行结果:

1
2
3

迭代器方法

fn main() {
    let v = vec![1, 2, 3, 4, 5];
    let result: Vec<i32> = v.iter()
        .filter(|&&x| x % 2 == 0)  // 筛选偶数
        .map(|&x| x * 2)           // 每个元素乘 2
        .collect();                // 收集到 Vec
    println!("{:?}", result);
}

运行结果:

[4, 8]

自定义迭代器

struct Counter {
    count: u32,
}

impl Iterator for Counter {
    type Item = u32;
    fn next(&mut self) -> Option<Self::Item> {
        if self.count < 5 {
            self.count += 1;
            Some(self.count)
        } else {
            None
        }
    }
}

fn main() {
    let counter = Counter { count: 0 };
    let sum: u32 = counter.sum();
    println!("Sum: {}", sum);
}

运行结果:

Sum: 15  // 1 + 2 + 3 + 4 + 5

参考资料与出站链接

  1. 官方文档
  1. 学习资源
  1. 社区支持