gpt4 book ai didi

c++ - vector 的 reserve() 方法的行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:44 31 4
gpt4 key购买 nike

我想知道 std::vector::reserve() 在以下情况下的行为:

  1. 假设 reserve(N) 被立即调用多次。较早的 reserve(N1) 会被添加或覆盖吗?
  2. 如果较早的 reserve(N1) 被最新调用覆盖,那么如果最新的 reserve(Nn) 需要更少的插槽会怎样?
  3. 在声明 vector 之后,如果我们只有 push_back() X 元素,然后我们调用 reserve(N)。将已经 push_back() XN 中的元素计数 ?
  4. 假设,如果 vector 有一些 X 被压入的元素,现在如果我们push_back() 再多 1 个元素 (X+1),则该对象必须搬迁;但我们还没有执行 push_back()。什么如果我们现在调用 reserve() 会发生什么?对象会被重新定位吗立即地 ?如果没有,那么空间是如何预留的?

最佳答案

reserve() 只是确保 vector 的分配内存至少足够大以包含作为其参数传递的项目数。于是……

  1. 以所有通过的最大值为准的最小有效保留容量。
  2. 参见 #1。
  3. 是的。
  4. reserve() 被调用时, vector 分配尽可能多的内存来存储传递给 reserve() 的项目数。

引用实际标准:

void reserve(size_type n)

If n is less than or equal to capacity(), this call has no effect. Otherwise, it is a request for allocation of additional memory. If the request is successful, then capacity() is greater than or equal to n; otherwise, capacity() is unchanged. In either case, size() is unchanged.

关于c++ - vector 的 reserve() 方法的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9304894/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com