24459


次のように，`Vec<T>::iter()`をイテレータを消費する関数`consume()`に対して渡したいのですが，

[code]

    fn consume<T: Iterator<Item=char>>(input: &mut T){
        unimplemented!()
    }
    
    fn main(){
        let mut buffer = vec!['a','b','c'];
        consume(&mut buffer.iter()); //type mismatch
    } 
    
[/code]

次のようなコンパイルエラーが生じます．

[code]

    prog.rs:7:5: 7:12 error: type mismatch resolving `<core::slice::Iter<'_, char> as core::iter::Iterator>::Item == char`:
      expected &-ptr,
    found char [E0271]
    
[/code]

`buffer`は`consume()`の呼出し後は破壊されても構いません．どのように書くのが良いでしょうか．


CC BY-SA 3.0
2016-04-29T13:58:28.680
24457
2016-04-29T14:20:40.663
8573
question
rust
Vec<T>のイテレータを消費するには


Vecが消費されて困る場合は、`cloned`メソッドを使ってイテレーターを複製してください。

[code]

    fn consume<T: Iterator<Item=char>>(input: T){
        unimplemented!()
    }
    
    fn main(){
        let buffer = vec!['a','b','c'];
        consume(buffer.iter().cloned());
    }
    
[/code]

Vecが消費されてもよい場合であれば、`into_iter`メソッドを使ってイテレーターに変換します。

[code]

    fn consume<T: Iterator<Item=char>>(input: T){
        unimplemented!()
    }
    
    fn main(){
        let buffer = vec!['a','b','c'];
        consume(buffer.into_iter());
    }
    
[/code]


CC BY-SA 3.0
2016-04-29T14:20:40.663
24459
2016-04-29T14:20:40.663
3890
24457
answer