#数组 #维度 #分割 #向量 #元素 #访问器 #安全性

vec_split

将向量的数组分割成元素的数组

5 个版本

0.1.4 2023 年 5 月 18 日
0.1.3 2023 年 5 月 18 日
0.1.2 2023 年 5 月 18 日
0.1.1 2023 年 5 月 18 日
0.1.0 2023 年 5 月 18 日

#2018Rust 模式

每月 38 次下载
micro_ndarray 中使用

MIT 许可证

25KB
547

vec_split

vec_split 是一个库,可以像处理每个向量维度的单一数组一样处理向量的数组。

示例

let mut array = [[0.0, 0.0]; 10];
let [mut x_array, mut y_array] = array.vec_split_fast_mut();
for (i, item) in x_array.iter_mut().enumerate() {
    *item = i as f64 / 10.0;
}
for (i, item) in y_array.iter_mut().enumerate() {
    *item = i as f64 * 2.0;
}
for item in x_array.iter() {
    println!("X {item}");
}
for item in y_array.iter() {
    println!("Y {item}");
}

安全性和访问器类型

如示例所示,vec_split 允许多个可变引用指向实际上相同的数组。这是安全的,因为分割数组的各个部分不能写入其他部分的地方,这意味着它们实际上是分开的。

FastAccessor 也使用不安全代码进行一些指针操作。因为它仍然需要保持安全,SizedVector 特质有一些特殊要求。如果这些要求总是得到保证,FastAccessor 就是安全的。

安全性:必须在内存中第一个维度之前没有额外项,必须不在项之间有填充!! 这意味着例如 Vec 是不适合此特质的。例如,[T; D] 是有效的。

这本质上就是说要求数组必须是数组,就像 [T; D] 一样。然而,Vec<T> 不适用于此,因为它在项周围有很多额外的空间。在这种情况下,必须使用 SafeAccessor,这可能会稍微慢一些。

SafeAccessor 不使用内存操作,所以它可能较慢,但它也不会因为某些特质的实现错误而造成未定义行为或其他奇怪的行为。

无运行时依赖