len()和capacity()有什么区别?

mfl*_*ehr 4 rust

当我创建一个向量时,长度和容量是相同的。这些方法有什么区别?

fn main() {
    let vec = vec![1, 2, 3, 4, 5];
    println!("Length: {}", vec.len()); // Length: 5
    println!("Capacity: {}", vec.capacity()); // Capacity: 5
}
Run Code Online (Sandbox Code Playgroud)

Den*_*ret 9

可增长向量为将来的添加保留空间,因此分配的空间(容量)和实际使用的空间(长度)之间存在差异。

标准库的文档对此Vec进行了解释:

向量的容量是为将来添加到向量中的任何元素分配的空间量不要将其与向量的长度混淆,向量的长度指定向量内实际元素的数量。如果向量的长度超过其容量,其容量将自动增加,但其元素必须重新分配。

例如,容量为 10、长度为 0 的向量将是一个空向量,其中可容纳 10 个以上的元素。将 10 个或更少的元素推入向量不会改变其容量或导致重新分配。但是,如果向量的长度增加到 11,则必须重新分配,这可能会很慢。因此,建议Vec::with_capacity尽可能指定向量的预期大小。