我使用外部库函数,它获取类型作为输入:
&mut [&mut [f32]]
,它应该表示具有固定维度的二维数组。
为了更好的性能,我想创建一个一维数组,这样所有的数据都会连续地保存在内存中,并将其转换为上面的形式。
但是,由于缺乏 Rust 经验,我有点挣扎,我想知道实现我的目标的“Rust 方式”是什么。
我能想到的一种方法是创建一个新的
Vec
,迭代一维arra,并将每个切片推送到它,但这感觉像是浪费内存。
提前致谢。
你不能把一个
Vec<f32>
变成一个&mut [&mut [f32]]
,但是你可以通过首先把它变成一个&mut [&mut [f32]]
,然后简单地将它包装在另一个Vec<f32>
中,从
&mut [f32]
廉价地构造
一个
&mut []
。.
fn main() {
let mut v = vec![1.0, 2.0, 3.0];
let inner = &mut *v;
add(&mut [inner], 10.0);
println!("{v:?}");
// [11.0, 12.0, 13.0]
}
fn add(arr: &mut [&mut [f32]], addend: f32) {
for outer in arr {
for inner in outer.iter_mut() {
*inner += addend;
}
}
}