在 push_back() 之前保留非空 std::vector 的正确方法



我很困惑N vector::reserve(N)是它期望在当前矢量大小或矢量的总空间之上添加的元素数量。

例如

#include <iostream>
#include <vector>
int main()
{
    std::vector<int> foo;
    foo.reserve(3);
    foo.push_back(1);
    foo.push_back(2);
    foo.push_back(3);
    foo.reserve(foo.size() + 2);// Should this be foo.reserve(2)?
    foo.push_back(4);
    foo.push_back(5);
}

foo.reserve(foo.size() + 2)应该只是foo.reserve(2)吗?

将矢量的容量增加到大于或等于 new_cap 的值。如果new_cap大于当前容量((,则分配新的存储,否则该方法不执行任何操作。

从此处的文档可以清楚地看出它是总大小。

你应该调用foo.reserve(foo.size() + 2),参见[vector.capacity](强调是我的(:

效果:通知向量计划的大小更改的指令,以便它可以相应地管理存储分配。 reserve() 之后,如果发生重新分配,capacity()大于或等于reserve的参数;否则等于之前的capacity()值。 此时发生重新分配,当且仅当当前容量小于 reserve() 的参数时。 如果引发异常不是由非 Cpp17CopyInsertable 类型的移动构造函数引发的,则不会产生任何影响。

参数需要foo.size() + 2。 引用 cpp 首选项

[reserve将]将向量的容量增加到大于或等于new_cap的值。

相关内容

  • 没有找到相关文章

最新更新