首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::vector capacity智能实现

std::vector capacity智能实现
EN

Stack Overflow用户
提问于 2015-08-25 14:52:38
回答 2查看 151关注 0票数 1

我知道std::vector的容量行为是特定于实现的,有没有什么聪明的实现可以做到这一点:

代码语言:javascript
复制
vector<int> v;
for(int i = 0; i < 10000 ; ++i){
    v.push_back(i);
}

在初始化时,它可以预测‘向量’的容量,在这个例子中,它将初始化容量到10000

我问这个是因为我一直认为gcc会做这种预测,但我找不到任何关于这方面的东西……我想我在什么地方见过这种情况,那么有没有什么实现可以做到这一点呢?

EN

回答 2

Stack Overflow用户

发布于 2015-08-25 15:35:51

没有什么是可以预测的。但是:

  • one可以使用reserve预先分配所需的最大数量的元素。然后,push_back将永远不需要reallocate.
  • push_back使用vector的增长策略,即只分配一个以上的元素。IIRC增长因子是2,这意味着在一系列push_back中重新分配的次数趋于对数。因此,对log2(N).

的N个push_back调用的成本收敛

票数 3
EN

Stack Overflow用户

发布于 2015-08-25 15:19:41

它为std::vector提供了不同的构造函数。其中一种可能是将缺省值和您想要的值的数量传递给向量。

来自std::vector的文档

代码语言:javascript
复制
// constructors used in the same order as described above:
std::vector<int> first;                                // empty vector of ints
std::vector<int> second (4,100);                       // four ints with value 100
std::vector<int> third (second.begin(),second.end());  // iterating through second
std::vector<int> fourth (third);                       // a copy of third

如果事先知道向量的最大大小,这将非常有用。

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32197323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档