Rust Error: Value of Type `Std: :Vec: :Vec` Cannot Be Built from `Std: :Iter: :Iterator`
I Am New to Rust and Encountered the Error Std: :Vec: :Vec Cannot Be Built from Std: :Iter: :Iterator When Trying to Use a Function Get_Even_Numbers() to...
I am new to rust and encountered the error
std::vec::Vec<i32>cannot be built fromstd::iter::Iterator<Item=&i32>
when trying to use a function get_even_numbers() to borrow v by passing it in by reference &v instead of by value v.
fn main() {
let v: Vec<i32> = (0..10).collect();
let even: Vec<i32> = get_even_numbers(&v);
println!("Even numbers: {:?}", even);
}
fn get_even_numbers(v: &Vec<i32>) -> Vec<i32> {
v.iter().filter(|x| x % 2 == 0).collect()
}
Why does the above give an error, but passing it in by value does not, as shown below?
Additionally, I used .iter() inside the function when passing in by reference and .into_iter() when passing in by value, not sure if these are the correct functions to use.
fn main() {
let v: Vec<i32> = (0..10).collect();
let even: Vec<i32> = get_even_numbers(v);
println!("Even numbers: {:?}", even);
}
fn get_even_numbers(v: Vec<i32>) -> Vec<i32> {
v.into_iter().filter(|x| x % 2 == 0).collect()
}
// Even numbers: [0, 2, 4, 6, 8]
1 Answer
Use v.iter().filter(|x| x % 2 == 0).cloned().collect(). That will (trivially) clone each of the &i32 references into actual i32 values.