乐闻世界logo
搜索文章和话题

How to set a Rust array length dynamically?

4 个月前提问
3 个月前修改
浏览次数39

1个答案

1

在 Rust 中,数组是拥有固定长度的数据结构。数组的长度在编译时就已经确定,并且一旦声明,就不能修改。这意味着你不能在运行时动态地改变数组的长度。

如果你需要一个可以在运行时改变大小的数据结构,你应该使用 Vec<T>,也就是向量。向量是一个可以动态增长和缩减的可变数组,非常适合需要动态长度的情况。

以下是一个使用 Vec<T> 来存储整数并在运行时动态修改其长度的例子:

rust
fn main() { let mut numbers: Vec<i32> = Vec::new(); // 创建一个新的空向量 // 动态地添加元素 numbers.push(1); // 现在向量包含一个元素 [1] numbers.push(2); // 现在向量包含两个元素 [1, 2] numbers.push(3); // 现在向量包含三个元素 [1, 2, 3] // 动态地移除元素 numbers.pop(); // 移除最后一个元素,现在向量包含 [1, 2] // 也可以使用with_capacity来预分配空间 let mut preallocated_numbers: Vec<i32> = Vec::with_capacity(10); // 现在这个向量有预分配的空间,但目前还没有包含任何元素 for i in 0..10 { preallocated_numbers.push(i); } // 这个向量现在包含10个元素,并且没有进行任何重新分配 println!("Numbers: {:?}", numbers); println!("Preallocated numbers: {:?}", preallocated_numbers); }

在这个例子中,numbers 是一个可以动态改变大小的 Vec<i32> 类型的向量。我们使用 push 方法添加元素,使用 pop 方法移除元素。preallocated_numbers 是另一个示例,其中我们使用了 with_capacity 方法来预分配一定量的空间,这可以帮助减少在向量增长时重新分配内存的次数。

需要注意的是,跟数组不同,向量由于其动态性质,会有一些性能开销。当你需要在编译时就确定数组长度,且数组长度不会改变时,使用数组是更好的选择。如果你需要动态修改长度,那么向量是更合适的选择。

2024年6月29日 12:07 回复

你的答案