Rust 我可以用迭代器来完成吗?

Rust 我可以用迭代器来完成吗?,rust,Rust,嗨,我写了一个函数,将向量映射到区间[0,1]: fn vec2interval(v:&Vec)->Vec{ 总数:f32=v.iter().sum(); 让mut interval:Vec=Vec![0f32;v.len(); 区间[0]=v[0]/总计; 对于1..v.len()中的i{ 区间[i]=区间[i-1]+v[i]/总计; } 返回间隔; } 对于迭代器,有什么方法可以做到同样的事情吗?我写了以下内容,但速度较慢,需要一个for循环: fn vec2interval(v:&Vec

嗨,我写了一个函数,将向量映射到区间[0,1]:

fn vec2interval(v:&Vec)->Vec{
总数:f32=v.iter().sum();
让mut interval:Vec=Vec![0f32;v.len();
区间[0]=v[0]/总计;
对于1..v.len()中的i{
区间[i]=区间[i-1]+v[i]/总计;
}
返回间隔;
}
对于迭代器,有什么方法可以做到同样的事情吗?我写了以下内容,但速度较慢,需要一个for循环:

fn vec2interval(v:&Vec)->Vec{
总数:f32=v.iter().sum();
让mut间隔:Vec=v
.国际热核实验堆(iter)
.地图(| x | x/总计)
收集::();
对于1..v.len()中的i{
区间[i]=区间[i-1]+区间[i];
}
返回间隔;
}
可以完成所有工作:

fn vec2interval(v:&Vec)->Vec{
总数:f32=v.iter().sum();
v、 iter()
.扫描(0.0,| acc,x |{
*acc+=x/总;
一些(*acc)
})
.collect()
}

另外,最好使用切片(
&[u8]
)而不是
Vec
作为参数。

删除
映射
并在
扫描中进行分割可能更简单。
谢谢!代码工作得很好!它比简单的for循环稍微慢一点,但很酷,希望对于更大的输入更快一些?迭代器有时会在性能和其他方面有所提高。如果没有适当的基准测试,很难对其进行推理,如果您愿意,请看一看。也考虑解释。