【发布时间】:2018-04-19 08:40:20
【问题描述】:
假设我使用的是 int a 的向量:
vector<int> a {1, 2, 34, 1222, 0};
然后,我想 push_back 一些这样的数据:
a.push_back (data);
但是,我的程序必须在我的向量上添加大量数据。
我正在在一本书上学习 C++。这本书说:“添加一个元素有时可能需要分配额外的存储空间。在这种情况下,必须将每个元素移动到新的存储空间中”,c++ Ressources Network 补充说:“就处理时间而言,这是一项相对昂贵的任务。 ”。我还找到了关于该主题的article。
但是,我的程序必须非常快。所以,我无法处理我的向量的这种“重新定位”。事实上,我的向量的大小可以超过 1GO 的内存。
我的问题很简单:
在重定位我的巨大向量之前如何知道剩余内存?
注意:我不知道向量的最终大小,因此我无法对其进行初始化以保留必要的内存。
如果您有任何问题或一些 cmets,请告诉我。
【问题讨论】:
-
std::vector::capacity 返回容器当前为其分配空间的元素数量。 当您插入一个元素并且
std::vector::capacity等于std::vector::size时,就会发生重新分配。 -
您系统的剩余内存还是向量中的剩余/保留内存?
-
您不应该真正担心矢量内部结构。它工作得很好。不同的容器对于不同的任务有不同的复杂性。选择最适合您的用例的一种。
-
这看起来像XY Problem。您实际上想解决什么问题?
-
如果那篇文章没有提到向量的容量或
vector::reserve,那么它就没有抓住重点
标签: c++