Vec

Vec 是标准的可调整大小堆分配缓冲区:

fn main() {
    let mut v1 = Vec::new();
    v1.push(42);
    println!("v1: len = {}, capacity = {}", v1.len(), v1.capacity());

    let mut v2 = Vec::with_capacity(v1.len() + 1);
    v2.extend(v1.iter());
    v2.push(9999);
    println!("v2: len = {}, capacity = {}", v2.len(), v2.capacity());

    // Canonical macro to initialize a vector with elements.
    let mut v3 = vec![0, 0, 1, 2, 3, 4];

    // Retain only the even elements.
    v3.retain(|x| x % 2 == 0);
    println!("{v3:?}");

    // Remove consecutive duplicates.
    v3.dedup();
    println!("{v3:?}");
}

Vec 会实现 Deref<Target = [T]>,这意味着您可以对 Vec 调用 slice 方法。

  • “Vec”以及“String”和“HashMap”都是一种集合。它包含的数据会存储在堆上。这意味着在编译时不需要知道数据量。它可以在运行时增大或缩小。
  • Notice how Vec<T> is a generic type too, but you don’t have to specify T explicitly. As always with Rust type inference, the T was established during the first push call.
  • “vec![…]”是用来代替“Vec::new()”的规范化宏,它支持向矢量添加初始元素。
  • 如需将矢量编入索引,您可以使用“[’ ‘]”方法,但如果超出边界,矢量将会 panic。此外,使用“get”将返回“Option”。“pop”函数会移除最后一个元素。
  • 介绍如何迭代矢量并更改它的值:“for e in &mut v { *e += 50; }”