У меня есть Vec
целых чисел, и я хочу создать новый Vec
, содержащий эти целые числа и квадраты этих целых чисел. Я мог бы сделать это в обязательном порядке:
let v = vec![1, 2, 3];
let mut new_v = Vec::new(); // new instead of with_capacity for simplicity sake.
for &x in v.iter() {
new_v.push(x);
new_v.push(x * x);
}
println!("{:?}", new_v);
но я хочу использовать итераторы. Я придумал этот код:
let v = vec![1, 2, 3];
let new_v: Vec<_> = v.iter()
.flat_map(|&x| vec![x, x * x])
.collect();
println!("{:?}", new_v);
но он выделяет промежуточный Vec
в функции flat_map
.
Как использовать flat_map
без выделения?