在 Rust语言教程 中,迭代器(Iterator)是一个核心概念。它不仅让代码更简洁、安全,还能带来零成本抽象的性能优势。无论你是刚接触 Rust编程入门 的新手,还是希望深入理解底层机制的开发者,掌握 Rust迭代器 都至关重要。

在Rust中,迭代器是一种可以按顺序访问集合(如数组、向量、哈希表等)中每个元素的对象。Rust通过 Iterator trait 来定义迭代器的行为。这个trait只有一个必须实现的方法:next(),它每次返回一个Option<T>:
Some(value) 表示还有下一个元素None 表示已经遍历完毕最简单的迭代器来自数组或Vec。使用 .iter() 方法即可获取一个不可变引用的迭代器:
let numbers = vec![1, 2, 3, 4, 5];// 创建迭代器let iter = numbers.iter();// 使用 for 循环遍历(for 循环内部会自动调用 next())for num in iter { println!("{}", num);}注意:上面的 iter 是一个实现了 Iterator trait 的类型。你也可以手动调用 next():
let mut iter = numbers.iter();println!("{:?}", iter.next()); // Some(&1)println!("{:?}", iter.next()); // Some(&2)println!("{:?}", iter.next()); // Some(&3)Rust提供了三种常用方法来创建不同类型的迭代器:
.iter():产生 &T 类型的引用(不可变).iter_mut():产生 &mut T 类型的可变引用.into_iter():消耗集合,产生 T 类型的值(所有权转移)let mut vec = vec![10, 20, 30];// iter(): &i32for x in vec.iter() { println!("{}", x);}// iter_mut(): &mut i32for x in vec.iter_mut() { *x *= 2; // 修改原值}// into_iter(): i32(vec 被消耗,不能再使用)for x in vec.into_iter() { println!("{}", x);}// 此时 vec 已无效Rust的迭代器是“惰性”的——除非你消费它(比如用 for 循环或 collect()),否则不会执行任何操作。你可以链式调用各种适配器方法来构建复杂的处理流程:
let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];let result: Vec = numbers .iter() .filter(|&x| x % 2 == 0) // 筛选偶数 .map(|x| x * x) // 平方 .collect(); // 收集为 Vecprintln!("{:?}", result); // [4, 16, 36, 64, 100] 这些适配器包括 map、filter、take、skip、fold 等,它们都返回新的迭代器,因此可以无限链式组合。
要实现自己的迭代器,只需为你的类型实现 Iterator trait,并提供 next 方法。例如,我们创建一个从1开始的计数器:
struct Counter { count: u32,}impl Counter { fn new() -> Counter { Counter { count: 0 } }}impl Iterator for Counter { type Item = u32; fn next(&mut self) -> Option { self.count += 1; if self.count < 6 { Some(self.count) } else { None } }}fn main() { let mut counter = Counter::new(); assert_eq!(counter.next(), Some(1)); assert_eq!(counter.next(), Some(2)); // ... // 或者直接遍历 for n in Counter::new() { println!("{}", n); }} 这里的关键是 type Item = u32;,它指定了迭代器每次返回的元素类型。
Rust的迭代器是“零成本抽象”(zero-cost abstraction)的典范。编译器会在编译期将迭代器链优化成与手写循环几乎相同的机器码,没有运行时开销。这意味着你可以写出既安全又高性能的代码。
通过本教程,你应该已经掌握了 Rust迭代器 的基本用法、适配器链、自定义实现以及其背后的性能优势。作为 Rust语言教程 的重要一环,熟练使用 Iterator trait 将极大提升你的 Rust编程入门 体验和代码质量。
记住:在Rust中,“能用迭代器就别用手动索引循环”——这不仅是惯用法,更是安全与性能的最佳实践。
本文由主机测评网于2025-12-20发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251210289.html