# 3.15.1 Vector（向量）

Rust 中的  Vector（向量）是一个动态的、可增长的数组，它可以存储一系列相同类型的元素。向量在连续的内存空间中存储元素，这使得访问和修改元素非常快。以下是有关 Rust 向量的一些详细信息：

## 1. 创建 Vector：

可以使用 `Vec<T>` 类型创建一个向量，其中 T 是存储在向量中的元素的类型。要创建一个新的空向量，可以使用 `Vec::new()` 方法。

```rust
let mut vec = Vec::new();
```

或者，可以使用宏 `vec![]` 初始化一个包含初始值的向量：

```rust
let vec = vec![1, 2, 3, 4, 5];
```

## 2. 添加元素：

可以使用 `push()` 方法向向量的末尾添加一个元素。
```rust
vec.push(6);
```

## 3.访问元素：

可以通过索引访问向量中的元素，类似于数组。请注意，尝试访问无效索引可能导致运行时错误。

```rust
let first = vec[0]; // 访问向量中的第一个元素
```

或者，可以使用 `get()` 方法安全地访问元素，它返回一个 `Option` 类型。如果指定的索引有效，则返回 `Some(element)`，否则返回 `None`。

```rust
let first = vec.get(0); // 返回 Option<&T>
```

## 4. 遍历元素：

可以使用 `for` 循环遍历向量中的所有元素。

```rust
for element in &vec {
    println!("Element: {}", element);
}
```

## 5. 删除元素：

可以使用 `remove()` 方法删除向量中指定索引处的元素。此操作将删除元素并将后续元素向前移动。

```rust
vec.remove(0); // 删除向量中的第一个元素
```

## 6. Vector 的容量和长度：

向量的长度是其中的元素数量，而容量是为这些元素分配的内存空间。向量会根据需要自动增长，但当长度超过容量时，它需要重新分配内存并复制元素到新内存区域。可以使用 `len()` 获取向量的长度，使用 `capacity()` 获取容量，还可以使用 `shrink_to_fit()` 方法减小容量以匹配当前长度。

## 7. 切片：

切片是对向量一部分元素的引用，可以用作轻量级的视图。要创建切片，可以使用范围语法：
```rust
let slice = &vec[1..4]; // 创建一个包含索引 1 到 3（包括 1，不包括 4）的元素的切片
```

向量是 Rust 中使用非常广泛的集合类型，因为它提供了灵活性、性能和安全性。
