2016-04-17 12 views
7

ベクトル(他のコレクションタイプの中でも)がIteratorであることを正確に述べてください。例えばRustでは、ベクトルは反復子ですか?

、私は、次のようにベクトルをループすることができ、それはIterator特性(私はそれを理解して)実装しているため:私はの一部である機能を使用したい場合は、しかし、

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

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

Iterator特性(fold,mapまたはfilterなど)は、最初にiter()をそのベクターにコールする必要がありますか?

私が持っていたもう一つの考えは、ベクトルがIteratorに変換されている可能性があり、その場合は上記の構文が意味があります。

+1

https://doc.rust-lang.org/book/iterators.htmlには、 'for x in&v'と' for x in v.iter() 'の両方についての情報があります。これも有効です。私はRust(まだ)を知らないので、実際に説明することも要約することもできません! –

答えて

20

いいえ、ベクトルはイテレータではありません。

しかし、forループがベクトルを必要なイテレータに変換するために使用する特性IntoIteratorを実装しています。 Vec<T>ため、移動および反復子はイテレータ戻って参照&T共有共有参照&Vec<T>、のために、タイプTのアイテムを返し、&mut Vec<T>するためのものである:documentation for VecあなたがIntoIteratorは、3つの方法で実装されていることを見ることができるで

そこでは可変参照が返されます。

iter()は、Vec<T>を直接参照に変換せずに共有参照を返すイテレータに直接変換する方法です。変更可能な参照を生成するための兄弟メソッドiter_mut()があります。