Rust 编程视频教程(进阶)——003_1 迭代器介绍
视频地址
头条地址:https://www.ixigua.com/i677586170644791348...
B站地址:https://www.bilibili.com/video/av81202308/
讲解内容
1、迭代器负责遍历序列中的每一项和决定序列何时结束的逻辑。当使用迭代器时,我们无需重新实现这些逻辑。
2、创建一个迭代器:迭代器是惰性的,意思是在调用方法使用迭代器之前,它都不会有任何效果。
例子:
let v1 = vec![1, 2, 3];
let v1_iter = v1.iter();
3、使用迭代器
例子:在for循环中使用迭代器
let v1 = vec![1, 2, 3];
let v1_iter = v1.iter();
for val in v1_iter {
println!("Got: {}", val);
}
4、Iterator trait:迭代器都实现了Iterator trait,这个trait定义于标准库中。该trait定义如下:
trait Iterator {
type Item;
fn next(mut self) -> Option<Self::Item>;
//省略其它内容
}
说明:type Item和Self::Item这种用法叫做定义trait的关联类型。
Item类型将是迭代器返回元素的类型,next方法是Iterator实现者被要求定义的唯一方法,next一次返回一个元素,当迭代器结束,则返回None。
5、next方法:迭代器通过next方法来消费一个项。
(1)不可变引用的使用迭代器
let v1 = vec![1, 2, 3];
let mut v1_iter = v1.iter();
if let Some(v) = v1_iter.next() {
println!("{}", v); //1
}
if let Some(v) = v1_iter.next() {
println!("{}", v); //2
}
if let Some(v) = v1_iter.next() {
println!("{}", v); //3
}
if let Some(v) = v1_iter.next() {
println!("{}", v); //3
} else {
println!("Reached end!") //printf "Reached end"
}
(2)如果希望迭代可变引用,则可以调用iter_mut。
例子:
let mut v2 = vec![1, 2, 3];
let mut v2_iter = v2.iter_mut();
if let Some(v) = v2_iter.next() {
*v = 3;
}
let it = v2.iter();
//打印:3,2,3
for val in it {
println!("{}", val);
}
本作品采用《CC 协议》,转载必须注明作者和本文链接