Rust 向量:可调整大小数组基础

RustRustBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将学习向量(vector),它是 Rust 中可重新调整大小的数组,可以随时增长或收缩。向量由三个参数表示:指向数据的指针、长度和容量。容量表示为向量保留了多少内存,当长度超过容量时,向量会重新分配更大的容量。我们可以使用 collect 方法将迭代器收集到向量中,使用 vec! 宏初始化向量,使用 push 方法在末尾插入新元素,并使用 len 方法获取元素数量。我们还可以使用索引访问元素,使用 pop 方法删除最后一个元素,并使用 iteriter_mut 方法遍历向量。此外,std::vec 模块中还有更多适用于向量的方法。

注意:如果实验未指定文件名,你可以使用任何你想要的文件名。例如,你可以使用 main.rs,并通过 rustc main.rs &&./main 进行编译和运行。

向量

向量是可重新调整大小的数组。与切片一样,它们的大小在编译时是未知的,但可以随时增长或收缩。向量由三个参数表示:

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

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

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);
    // FIXME ^ 注释掉这一行

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

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

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

    // 越界索引会导致恐慌
    println!("第四个元素:{}", xs[3]);
    // FIXME ^ 注释掉这一行

    // 可以轻松遍历向量
    println!("xs 的内容:");
    for x in xs.iter() {
        println!("> {}", x);
    }

    // 也可以在迭代时将迭代计数枚举到一个单独的变量 (`i`) 中,同时遍历向量
    for (i, x) in xs.iter().enumerate() {
        println!("在位置 {} 我们有值 {}", i, x);
    }

    // 由于 `iter_mut`,可变向量也可以以允许修改每个值的方式进行遍历
    for x in xs.iter_mut() {
        *x *= 3;
    }
    println!("更新后的向量:{:?}", xs);
}

std::vec 模块下可以找到更多 Vec 方法。

总结

恭喜你!你已经完成了向量实验。你可以在 LabEx 中练习更多实验来提升你的技能。