2016-04-17 43 views
7

說明矢量(其他集合類型)是Iterator是否準確?在Rust中,是一個迭代器嗎?

例如,我可以遍歷以下列方式的載體,因爲它實現了Iterator性狀(我理解):

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

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

但是,如果我想使用是的一部分的功能Iterator特徵(如fold,mapfilter)爲什麼我必須先在該向量上撥打iter()

我的另一個想法是,也許一個向量可以轉換爲Iterator,在這種情況下,上面的語法更有意義。

+1

https://doc.rust-lang.org/book/iterators.html說了一些關於'for x in&v'與'for v.iter()'有關的東西,這也是有效的。雖然我不認識Rust,但我實際上無法解釋或總結它! –

回答

20

不,一個向量不是一個迭代器。

但它實現了特徵IntoIteratorfor循環用於將矢量轉換爲所需的迭代器。

documentation for Vec你可以看到IntoIterator有三種方式實現:爲Vec<T>,這是移動和迭代器返回T類型的項目,爲共享參考&Vec<T>,在迭代器返回共享引用&T,併爲&mut Vec<T> ,在那裏返回可變引用。

iter()只是Vec中的一種方法,用於將Vec<T>直接轉換爲返回共享引用的迭代器,而無需先將其轉換爲引用。有一個用於生成可變引用的同級方法iter_mut()

相關問題