在Rust中,矢量是迭代器吗?

时间:2016-04-17 04:58:32

标签: iterator rust

说明向量(以及其他集合类型)是Iterator吗?

是否准确

例如,我可以通过以下方式循环遍历向量,因为它实现了Iterator特征(据我所知):

let v = vec![1, 2, 3, 4, 5];

for x in &v {
    println!("{}", x);
}

但是,如果我想使用属于Iterator特征的函数(例如foldmapfilter),为什么我必须先调用{{ 1}}在那个向量上?

我的另一个想法可能是,矢量可以转换为iter(),在这种情况下,上面的语法更有意义。

1 个答案:

答案 0 :(得分:26)

不,矢量不是迭代器。

但是它实现了特性IntoIteratorfor循环使用该特征将向量转换为所需的迭代器。

documentation for Vec中,您可以看到IntoIterator以三种方式实现:对于移动的Vec<T>,并且迭代器返回类型为T的项,共享引用&Vec<T>,其中迭代器返回共享引用&T,而&mut Vec<T>则返回可变引用。

iter()只是Vec中的一种方法,可以将Vec<T>直接转换为返回共享引用的迭代器,而无需先将其转换为引用。有一个兄弟方法iter_mut()用于生成可变引用。