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

  • 本文关键字:区别 capacity len rust
  • 更新时间 :
  • 英文 :


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

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

可生长的向量为将来的添加提供空间,因此分配的空间(容量)与实际使用的空间( length )之间的差异。

Vec的标准库文档中解释了这一点:

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

例如,容量10和长度为0的向量将是一个空的矢量,其空间还有10个元素。将10个或更少的元素推向向量不会改变其能力或导致重新分配。但是,如果向量的长度增加到11,则必须重新分配,这可能很慢。因此,建议尽可能使用Vec::with_capacity来指定向量有多大的预期。

len()返回向量中的元素数(即向量的长度)。在下面的示例中,vec包含5个元素,因此len()返回5

capacity()返回vector 可以保持的元素数(而无需重新分配内存)。在下面的示例中,vec可以容纳105元素,因为我们使用reserve()除了原始5外分配至少100个插槽(可能会分配更多插槽以最大程度地减少分配的数量)。

>
fn main() {
    let mut vec = vec![1, 2, 3, 4, 5];
    vec.reserve(100);
    assert!(vec.len() == 5);
    assert!(vec.capacity() >= 105);
}

最新更新