【发布时间】:2009-11-24 05:21:26
【问题描述】:
看起来像一个愚蠢的问题。但是对我的answer 对其中一个 SO 问题的评论让我重新思考。
[评论说,空向量的容量不必为零]
默认情况下,我的答案是 0,因为向量中没有元素。将容量保持为 0 是有意义的,并且在第一次分配时可以增加它而不会影响性能。
但标准并没有说什么。 (我也检查了 Josuttis 的书)。
它纯粹是实现特定的吗?是否有任何 STL 供应商使用任意数字作为空向量的容量?
任何想法...
【问题讨论】:
看起来像一个愚蠢的问题。但是对我的answer 对其中一个 SO 问题的评论让我重新思考。
[评论说,空向量的容量不必为零]
默认情况下,我的答案是 0,因为向量中没有元素。将容量保持为 0 是有意义的,并且在第一次分配时可以增加它而不会影响性能。
但标准并没有说什么。 (我也检查了 Josuttis 的书)。
它纯粹是实现特定的吗?是否有任何 STL 供应商使用任意数字作为空向量的容量?
任何想法...
【问题讨论】:
C++ 标准 23.2.4.2 只说 vector::capacity 是
向量可以容纳而不需要重新分配的元素总数。
这意味着实际值完全是特定于实现的。
【讨论】:
容量可以是实施者认为正确或必要的任何内容。
还应该注意的是,假设您知道当前的capacity() 而无需调用该函数,这绝不是“安全的”。如果您保留 10 个元素,则实现者可以随意分配 100 个元素。或 11、42(首选)或仅 10。
【讨论】:
为了快速浏览 Google 并在一些随机论坛(通常是未知的血统,所以,是的)上弹跳,它似乎是特定于实现的。
这几乎不是问题,因为您可以通过调用 reserve 立即更改它。
【讨论】:
如果确定要存储什么数据向量并且是特定于实现的,则可以通过对向量使用 resize() API 来更改向量的容量。
【讨论】: