【问题标题】:what is the capacity of an empty vector?空向量的容量是多少?
【发布时间】:2009-11-24 05:21:26
【问题描述】:

看起来像一个愚蠢的问题。但是对我的answer 对其中一个 SO 问题的评论让我重新思考。

[评论说,空向量的容量不必为零]

默认情况下,我的答案是 0,因为向量中没有元素。将容量保持为 0 是有意义的,并且在第一次分配时可以增加它而不会影响性能。

但标准并没有说什么。 (我也检查了 Josuttis 的书)。

它纯粹是实现特定的吗?是否有任何 STL 供应商使用任意数字作为空向量的容量?

任何想法...

【问题讨论】:

    标签: c++ stl vector


    【解决方案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() 不会改变向量的大小;它只会改变向量的容量。
        猜你喜欢
        • 1970-01-01
        • 2010-10-08
        • 2017-09-30
        • 2011-12-22
        • 2021-01-18
        • 2018-04-12
        • 2017-10-05
        相关资源
        最近更新 更多