1. Rust迭代器基础概念
Rust的迭代器是处理集合数据的强大抽象,它提供了一种统一的方式来遍历和操作序列。与C++或Java等语言中的迭代器不同,Rust的迭代器是惰性的(lazy),这意味着在你明确要求消费(consume)它们之前,它们不会做任何实际工作。
迭代器模式的核心是将数据访问逻辑与数据结构本身分离。在Rust中,几乎所有集合类型(如Vec、HashMap等)都实现了IntoIterator trait,允许它们转换为迭代器。这种设计使得我们可以用相同的方式处理不同类型的数据源。
rust复制let v1 = vec![1, 2, 3];
let v1_iter = v1.iter(); // 创建不可变引用的迭代器
Rust迭代器的一个重要特性是它们实现了Iterator trait,这个trait定义了迭代器的基本行为:
rust复制pub trait Iterator {
type Item;
fn next(&mut self) -> Option<Self::Item>;
// 有大量默认实现的方法...
}
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 迭代器类型与创建方式
2.1 三种基本迭代器类型
Rust中主要有三种迭代器变体,区别在于它们如何处理所有权:
- iter():产生集合中元素的不可变引用(&T)
- iter_mut():产生集合中元素的可变引用(&mut T)
- into_iter():消耗集合并返回元素的所有权(T)
rust复制let mut v = vec!["a".to_string(), "b".to_string()];
// 不可变引用迭代器
for s in v.iter() {
println!("{}", s); // s是&String类型
}
// 可变引用迭代器
for s in v.iter_mut() {
s.push_str("!"); // 可以修改元素
}
// 所有权转移迭代器
for s in v.into_iter() {
println!("{}", s); // s是String类型,v不再可用
}
