yai*_*chu 2 reference lifetime rust
在下面的代码片段中:
let b: Vec<usize> = a.iter().filter(|x| **x > 5).map(|x| *x).collect();
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来使b成为值向量而不是引用?(代替.map(|x| *x))
有没有类似的东西:
fn iter_values<T : Copy>(c: &Vec<T>) -> std::iter::Map<std::slice::Iter<T>, fn(&T) -> T> {
c.iter().map(|x| *x)
}
Run Code Online (Sandbox Code Playgroud)
可以像这样使用:
let b: Vec<usize> = iter_values(&a).filter(|x| *x > 5).collect();
Run Code Online (Sandbox Code Playgroud)
使用.copied:
let b: Vec<usize> = a.iter().copied().filter(|x| *x > 5).collect();
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用.cloned适用于任何实现 的类型Clone,但请注意,这可能会导致通过克隆引用将引用转换为对象的不小的成本。