什么是向量?

17 Mar 2025 | 5 分钟阅读

向量是一种单一的数据结构,它使你能够在内存中并排放置存储多个值。 当我们有一个项目列表时,例如购物车中的项目,向量非常有用。

要点

  • 向量用于存储相同类型的值。
  • 向量用 Vec<T> 表示。
  • Vec<T> 由标准库提供,可以容纳任何类型的数据,其中 T 决定向量的类型。
  • 向量的数据分配在堆上。
  • 向量是一个可增长的数组,这意味着可以在运行时添加新元素。

Vec<T>:当一个向量包含特定类型时,它在尖括号中表示。

如何创建一个向量?

可以使用 Vec::new() 函数创建向量。 让我们来看看这个

在上面的声明中,v 是一个 i32 类型的向量,它是使用 Vec::new() 函数创建的。

  • 还有另一种创建向量的方法

Rust 提供了 vec! 宏来创建向量并保存我们提供的值。

例如

在上面的声明中,向量 v 是使用向量宏 vec! 创建的。 对于 vec!,Rust 自动推断向量 v 的类型为 Vec<i32>,因为向量宏包含整数值。

注意:如果我们想重复向量的初始值,也有另一种实现 vec! 的方法

在上面的声明中,向量 'v' 是使用向量宏创建的,该宏包含值 2 'i' 次。

访问元素

可以使用下标运算符 [] 访问向量的特定元素。

让我们通过一个例子来理解

输出

first element of a vector is :20
Second element of a vector is :30
Third element of a vector is :40
Fourth element of a vector is :50
  • 访问向量元素的第二种方法是使用 get(index) 方法,其中向量的索引作为参数传递,它返回 Option<&t> 类型的值。

让我们通过一个例子来理解

输出

Fourth element of a vector is 50

在上面的示例中,使用 get() 方法访问向量的第四个元素。

[] 方法和 get() 方法的区别

当我们使用 [] 运算符访问不存在的元素时,它会导致程序 panic。 因此,当我们尝试访问不存在的元素时,程序会崩溃。 如果我们尝试使用 get() 方法访问元素,那么它将返回 None 而不会 panic。

让我们通过一个例子来理解这一点

  • get(index)

输出

None
  • [] 运算符

输出

Rust Vector

遍历向量中的值

如果我们想访问向量的每个元素,那么我们可以遍历向量的元素,而不是使用索引来访问向量的特定元素。

我们可以使用 'for' 循环来遍历可变或不可变引用。

让我们看一个不可变引用的简单示例

输出

Elements of vector are :20 30 40 50

让我们看一个可变引用的简单示例

输出

Elements of vector are :20 30 40 50

在上面的示例中,我们正在更改向量的值。 因此,向量是一个可变引用。 在 'i' 变量之前使用解引用(*)运算符来获取向量 v 的值。

更新向量

当我们创建向量时,我们使用 push() 方法将元素插入向量中。 push() 将新元素插入到向量的末尾。

让我们看一个简单的例子

输出

java

在上面的示例中,push() 函数用于在运行时将元素插入到向量中。 向量 'v' 被设置为可变的,这样我们也可以更改向量的值。

删除向量

当向量超出范围时,它会自动从内存中删除或释放。

让我们通过一个简单的场景来理解这一点

在上述情况下,当向量超出范围时,它被释放,这意味着向量中存在的所有元素都将被删除。

使用 Enum 存储多种类型

向量可以存储相同类型的元素,这是向量的一个主要缺点。 Enum 是一种自定义数据类型,它包含相同 enum 名称下各种类型的变体。 当我们想将不同类型的元素存储在向量中时,我们使用 enum 类型。

让我们通过一个例子来理解这一点

输出

A(5)
B(10.7)
C(javaTpoint)

在向量中使用 enum 的优点

  • Rust 在编译时知道向量元素的类型,以确定堆上每个元素所需的内存量。
  • 当一个向量由一种或多种类型的元素组成时,对元素执行的操作将导致错误,但是使用 带有匹配的 enum 将确保可以在运行时处理每个可能的情况。

下一个主题教程