cfanbo / cfanbo.github.io

1 stars 0 forks source link

Rust中的迭代器iter | 学习笔记 #236

Open cfanbo opened 11 months ago

cfanbo commented 11 months ago

https://blog.haohtml.com/posts/iterators-in-rust/

迭代器模式允许你对一个序列的项进行某些处理。迭代器(iterator)负责遍历序列中的每一项和决定序列何时结束的逻辑。当使用迭代器时,我们无需重新实现这些逻辑。 在 Rust 中,迭代器是 惰性的(lazy),这意味着在调用方法使用迭代器之前它都不会有效果。例如,示例中的代码通过调用定义于 Vec 上的 iter 方法在一个 vector v1 上创建了一个迭代器。这段代码本身没有任何用处: let v1 = vec![1, 2, 3]; let v1_iter = v1.iter(); 迭代器被储存在 v1_iter 变量中。一旦创建迭代器之后,可以选择用多种方式利用它。 迭代器分类 Rust 中迭代器根据 所有权 可分为 iter()、iter_mut()、into_iter() 三种迭代器,使用场景: 获取集合元素不可变引用的迭代器,对应方法为 iter() 获取集合元素可变引用的迭代器,对应方法为 iter_mut() 获取集合元素所有权的迭代器,对应方法为 into_iter() 也就是说当你在 Rust 中看到调用了 iter() 方法,则表示这里使用了不可变迭代器,只能读取元素值,无法修改;如果看到 iter_mut() 则表示使用了可变迭代器,您可以对原始值进行修改;而如果看到 into_iter() 的话,则说明使用了集合元素的所有权引用,当迭代器使用完毕后,就对应的内存将自动根据所有权规则被释放回收。 不可变引用迭代器 iter() fn main() { let a = [1, 2, 3]; // 不可变引用迭代器 let mut iter = a.iter(); println!("{:?}", iter.len()); // 当前集合元素个数 // A call to next() returns the next value.