简介
在 Rust 中,Vec<T>
是一个动态增长的列表,允许我们在堆上分配和释放内存。它提供了对元素的高效访问和修改。本教程将深入探讨如何使用 Vec<T>
来有效地储存和操作列表。
创建一个 Vec<T>
在 Rust 中,你可以通过多种方式初始化 Vec<T>
:
-
空的 Vec:如果你想要创建一个空的向量并随后填充它,可以使用
Vec::new()
。例如:
let mut vec: Vec<i32> = Vec::new();
-
带有初始值的 Vec:你也可以创建一个包含一些初始值的向量。这可以通过
vec!
宏来实现,例如:
let vec = vec![1, 2, 3];
添加元素到 Vec<T>
Rust 提供了几种方法向 Vec<T>
添加新的元素:
- push():此方法可将一个值附加到向量的末尾。例如:
let mut vec = Vec::new();
vec.push(5);
vec.push(6);
- insert():此方法可以在指定位置插入元素,其他元素将移动到较高的索引。例如:
let mut vec = vec![1, 2, 3];
vec.insert(1, 7); // vec is now [1, 7, 2, 3]
从 Vec<T> 中获取元素
你可以通过索引来访问 Vec<T>
的元素。Rust 提供了两种方法:
- 使用 &:这将返回一个指向该元素的不可变引用。例如:
let vec = vec![1, 2, 3];
let first = &vec[0];
-
使用 get():此方法返回一个
Option<&T>
,如果索引在向量的边界内,则为Some(&element)
;否则为None
。这是处理可能出现的越界错误的首选方式。例如:
let vec = vec![1, 2, 3];
match vec.get(0) {
Some(first) => println!("The first element is {}", first),
None => println!("There is no first element."),
}
迭代 Vec<T>
Rust 提供了多种方式来遍历 Vec<T>
:
- 使用 for...in:这是最常见的方法,它会返回每个元素的不可变引用。例如:
let vec = vec![1, 2, 3];
for i in &vec {
println!("{}", i);
}
- 使用 iter_mut():此方法返回每个元素的可变引用,允许你修改它们。例如:
let mut vec = vec![1, 2, 3];
for i in vec.iter_mut() {
*i *= 2;
}
总结
本教程深入探讨了 Rust 中的 Vec<T>
,解释了如何创建、添加和访问元素,以及如何迭代和遍历列表。熟练掌握这些技能将使你在 Rust 中更高效地处理数据集合。