Vectors - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# Vectors

向量（Vector）是可调整大小的数组。与切片（Slice）类似，它们的大小在编译时是未知的，但可以随时增长或缩小。向量由 3 个参数表示：

- 指向数据的指针
- 长度
- 容量

容量表示为向量预留的内存量。只要长度小于容量，向量就可以增长。当需要超过这个阈值时，向量会被重新分配更大的容量。

    fn main() {
        // 迭代器可以被收集到向量中
        let collected_iterator: Vec<i32> = (0..10).collect();
        println!("将 (0..10) 收集到：{:?}", collected_iterator);

        // 可以使用 `vec!` 宏初始化向量
        let mut xs = vec![1i32, 2, 3];
        println!("初始向量：{:?}", xs);

        // 在向量末尾插入新元素
        println!("将 4 推入向量");
        xs.push(4);
        println!("向量：{:?}", xs);

        // 错误！不可变向量无法增长
        collected_iterator.push(0);
        // 修复：^ 注释掉此行

        // `len` 方法返回当前存储在向量中的元素数量
        println!("向量长度：{}", xs.len());

        // 使用方括号进行索引（索引从 0 开始）
        println!("第二个元素：{}", xs[1]);

        // `pop` 移除并返回向量的最后一个元素
        println!("弹出最后一个元素：{:?}", xs.pop());

        // 越界索引会导致 panic
        println!("第四个元素：{}", xs[3]);
        // 修复：^ 注释掉此行

        // 可以轻松地遍历 `Vector`
        println!("xs 的内容：");
        for x in xs.iter() {
            println!("> {}", x);
        }

        // 遍历 `Vector` 时，可以同时用一个单独的变量（`i`）
        // 来枚举迭代计数
        for (i, x) in xs.iter().enumerate() {
            println!("在位置 {} 的值是 {}", i, x);
        }

        // 借助 `iter_mut`，可变的 `Vector` 也可以被遍历，
        // 并且允许修改每个值
        for x in xs.iter_mut() {
            *x *= 3;
        }
        println!("更新后的向量：{:?}", xs);
    }

更多 `Vec` 方法可以在 std::vec 模块中找到