似乎每次向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()
是另一种方法,但也不方便。
答案 0 :(得分:5)
没有办法。
你唯一的选择是编写自己的矢量数据结构,这样你就可以随心所欲地做任何事情(或者你可以复制一个互联网/ c ++库的实现并改变你需要的东西并将新的载体包括在内你的节目)。
实际上你也可以使用数组和realloc
命令。