Rust 使用 Vec<T>(Vector)储存列表

简介

在 Rust 中,Vec<T> 是一个动态增长的列表,允许我们在堆上分配和释放内存。它提供了对元素的高效访问和修改。本教程将深入探讨如何使用 Vec<T> 来有效地储存和操作列表。

创建一个 Vec<T>

在 Rust 中,你可以通过多种方式初始化 Vec<T>

  1. 空的 Vec:如果你想要创建一个空的向量并随后填充它,可以使用 Vec::new()。例如:
let mut vec: Vec<i32> = Vec::new();
  1. 带有初始值的 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 中更高效地处理数据集合。