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 协议》,转载必须注明作者和本文链接

令狐一冲

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!