是否准确地说明一个向量(以及其他集合类型)是一个Iterator?
例如,我可以通过以下方式循环遍历向量,因为它实现了Iterator特征(据我所知):
let v = vec![1, 2, 3, 4, 5];
for x in &v {
println!("{}", x);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想使用属于Iterator特征的函数(例如fold,map或filter),为什么我必须首先调用iter()该向量?
我的另一个想法是,可能会将矢量转换为a Iterator,在这种情况下,上面的语法更有意义.
sta*_*lue 31
不,矢量不是迭代器.
但是它实现了trait IntoIterator,for循环使用它来将向量转换为所需的迭代器.
在文档中,Vec您可以看到它IntoIterator以三种方式实现:for Vec<T>,移动,迭代器返回类型的项T,用于共享引用&Vec<T>,迭代器返回共享引用&T,以及&mut Vec<T>返回可变引用的位置.
iter()仅仅是一个方法在Vec转换Vec<T>直接进入返回共享引用一个迭代,而不首先将其转化为参考.有一种iter_mut()生成可变引用的兄弟方法.
| 归档时间: |
|
| 查看次数: |
6214 次 |
| 最近记录: |