空向量的容量是多少?
Posted
技术标签:
【中文标题】空向量的容量是多少?【英文标题】:what is the capacity of an empty vector? 【发布时间】:2009-11-24 05:21:26 【问题描述】:看起来像一个愚蠢的问题。但是对我的answer 对其中一个 SO 问题的评论让我重新思考。
[评论说,空向量的容量不必为零]
默认情况下,我的答案是 0,因为向量中没有元素。将容量保持为 0 是有意义的,并且在第一次分配时可以增加它而不会影响性能。
但标准并没有说什么。 (我也检查了 Josuttis 的书)。
它纯粹是实现特定的吗?是否有任何 STL 供应商使用任意数字作为空向量的容量?
任何想法...
【问题讨论】:
【参考方案1】:C++ 标准 23.2.4.2 只说 vector::capacity
是
向量可以容纳而不需要重新分配的元素总数。
这意味着实际值完全是特定于实现的。
【讨论】:
【参考方案2】:容量可以是实施者认为正确或必要的任何内容。
还应该注意的是,假设您知道当前的capacity()
而无需调用该函数,这绝不是“安全的”。如果您保留 10 个元素,则实现者可以随意分配 100 个元素。或 11、42(首选)或仅 10。
【讨论】:
确实如此。 GNU STL 从容量 0 开始。Java API 规范说它从容量 10 开始。这确实是一个实现细节。【参考方案3】:为了快速浏览 Google 并在一些随机论坛(通常是未知的血统,所以,是的)上弹跳,它似乎是特定于实现的。
这几乎不是问题,因为您可以通过调用 reserve
立即更改它。
【讨论】:
【参考方案4】:如果确定要存储什么数据向量并且是特定于实现的,则可以通过对向量使用 resize() API 来更改向量的容量。
【讨论】:
> 可以使用 resize() 改变向量的容量,不,这也改变了大小。保留更改容量而不影响大小。 是的,fred 你是对的,保留只改变容量而不影响向量的大小。道歉。 更准确地说,可以通过调用reserve() 或resize() 来调整vector 的容量。这些成员函数在两个方面有所不同。与分配内存并使用默认值初始化的 resize() 不同,reserve() 仅分配原始内存而不进行初始化。此外,reserve() 不会改变向量的大小;它只会改变向量的容量。以上是关于空向量的容量是多少?的主要内容,如果未能解决你的问题,请参考以下文章