有什么好的方法可以在Rust中填充一个结构体向量,满足以下条件:
- 大小是动态的,但在初始化时已知。 - 不需要先将内存初始化为虚拟值。 - 不需要在填充时重新分配内存。 - 在此示例中,向量的所有成员都始终被初始化(与Rust保证没有未定义行为相一致)。
而且最理想的情况是:
- 不需要对每个索引访问进行索引检查(因为在声明向量时已经知道了大小,这应该是可能的)。 - 不需要使用unsafe关键字(不确定是否合理,然而编译器可以检测到所有值始终被填充,从而允许在unsafe代码块中使用这样的逻辑)。
C等效代码如下:
- 大小是动态的,但在初始化时已知。 - 不需要先将内存初始化为虚拟值。 - 不需要在填充时重新分配内存。 - 在此示例中,向量的所有成员都始终被初始化(与Rust保证没有未定义行为相一致)。
而且最理想的情况是:
- 不需要对每个索引访问进行索引检查(因为在声明向量时已经知道了大小,这应该是可能的)。 - 不需要使用unsafe关键字(不确定是否合理,然而编译器可以检测到所有值始终被填充,从而允许在unsafe代码块中使用这样的逻辑)。
C等效代码如下:
struct MyStruct *create_mystruct(const uint n) {
struct MyStruct *vector = malloc(sizeof(*vector) * n);
for (uint i = 0; i < n; i++) {
/* any kind of initialization */
initialize_mystruct(&vector[i], i);
}
return vector;
}
我正在移植一些用C编写的代码,它使用一个简单的循环来填充数组,因此我想知道是否有一种Rustic方式来执行这样一个常见任务,并且没有或者只有最小的开销?
如果在Rust版本的代码中通常需要进行一些额外的检查,那么最接近的等价物是什么?