std :: vector和内存分配

时间:2014-09-08 19:12:58

标签: c++ stdvector

似乎每次向std::vector添加新元素时,如果没有空元素,分配元素的数量会加倍(至少在GCC 4.9中)。我认为这样做是为了实现摊销的恒定时间复杂度。

,例如,运行此代码后:

v.push_back (1);
v.push_back (2);
v.push_back (3);
v.push_back (4);
v.push_back (5);

v.shrink_to_fit(); // capacity is 5 now
v.push_back (6);

std::cout << v.capacity () << std::endl;

输出为10.

在内存受限系统中,有没有办法防止这种行为,即使它是以性能损失为代价的?

此外,是否可以指出它应该只分配固定数量的元素而不是加倍?

我知道在添加新元素之前我可以调用std::vector::reserve(),但在我的情况下看起来很乱......调用std::vector::shrink_to_fit()是另一种方法,但也不方便。

1 个答案:

答案 0 :(得分:5)

没有办法。

你唯一的选择是编写自己的矢量数据结构,这样你就可以随心所欲地做任何事情(或者你可以复制一个互联网/ c ++库的实现并改变你需要的东西并将新的载体包括在内你的节目)。

实际上你也可以使用数组和realloc命令。