C++ STL 中 vector 的 size 和 capacity 之间的区别

2025 年 5 月 12 日 | 阅读 4 分钟

在本文中,我们将讨论 C++ 中 vector 的 **size** 和 **capacity** 之间的区别。在讨论它们的区别之前,我们必须了解 C++ 中 vector 的 size() 和 capacity。

C++ 中的 Size 是什么?

**"size"** 一词描述了 C++ STL std::vector 中当前包含的元素数量。它可以通过 .size() 方法访问,并显示 vector 条目的实际数量。当添加或删除元素时,size 会动态调整。例如,当我们调用 vec.push_back(10) 时,size 会增加 1。size 不能超过 vector 的大小。使用 .resize() 会修改 vector 的 size,尽管它可能会默认初始化其他项。

  • vector 的 size 是其中当前存在的组件数量。
  • 可以使用 .size() 方法确定 vector 拥有的元素数量。
  • 我们可以通过添加或删除元素来动态调整 size。

示例代码

C++ 中 vector 的 Capacity 是什么?

std::vector 可以容纳的最大元素数量,而无需额外内存,称为其最大 capacity。它通常大于或等于 vector 的 size,并且可以通过 .capacity() 方法检索。当 vector 的 size 超过其现有 capacity 时,内存会重新分配,通常通过将 capacity 加倍。将旧项复制到新内存地址是此过程的一部分,这可能代价高昂。当预先知道元素数量时,可以使用 .reserve() 函数预先分配 capacity 以最大化效率。为 vector 分配的内存缓冲区的大小由 capacity 表示。

  • capacity 是 vector 可以包含的最大元素数量,而无需重新分配内存。
  • 它大于或等于 vector。
  • 当插入超出 vector 当前 capacity 时,capacity 会分块增加,以最大程度地减少频繁内存重新分配的开销。
  • 可以使用 .capacity() 查找 vector 的 capacity

示例

C++ 中 vector 的 Size 和 Capacity 的主要区别

Difference between Size and Capacity of vector in C++ STL

C++ 中 vector 的 size 和 capacity 之间存在一些主要区别。一些主要区别如下:

方面大小容量
定义vector 的当前元素计数。在需要重新分配之前可以存储的最大元素数。
关系永远不大于或等于 capacity。永远不小于或等于 size。
调整方法可以使用 .resize() 函数显式修改它。使用 .reserve() 函数,可以进行特定调整。
动态行为当添加或删除元素时,它会变化。它通过 .reserve() 或在重新分配期间自动更改。
内存使用它只显示活动组件正在消耗的 RAM。它反映了分配的内存量,无论使用情况如何。
访问方法.size() 函数检索当前大小。.capacity() 函数检索当前 capacity。

示例代码

让我们举一个例子来说明 C++ 中 vector 的 size 和 capacity。

输出

 
Initially: Size = 0, Capacity = 0
After push_back: Size = 1, Capacity = 1
After reserve(20): Size = 1, Capacity = 20   

说明

  • 在此示例中,vector 的 size 表示它包含多少元素。
  • vector 的 capacity 表示它为存储元素分配了多少存储空间。

结论

总而言之,std::vector 的 size 和 capacity 是 C++ STL 中两个不同但相关的概念,对于高效的内存管理和速度至关重要。虽然 size 随着元素的添加或删除而波动,但 capacity 显示了为元素存储分配的内存,即无需重新分配即可支持的元素数量。使用 resize()、reserve() 和 shrink_to_fit() 等函数,开发人员可以优化内存使用和速度,尤其是在处理大型或经常更改的数据集时。size 和 capacity 协同工作以保持 vector 的动态性质,同时保持其效率。