我不是自定义分配器的用户,但我想知道是否可以使用自定义分配器来重新定义增长策略。例如,在大多数实现中,std::vector
几何增长。是否有可能为算术增长改变此策略,例如每次需要重新分配时添加10个元素。如果答案是肯定的,那该怎么做?
答案 0 :(得分:6)
没有。重新分配策略由vector
定义,而不是由它使用的分配器定义。分配器只用于提供内存 - 由vector
本身决定它要提供多少内存。
标准规定push_back
按摊销时间不变。来自[vector.modifiers]
复杂性:插入元素的数量加上到结尾的距离是复杂的 矢量。
由于push_back
必须是O(1)
,vector
的增长策略不能算术 - 否则我们会有线性时间插入。
要做你想做的事,你必须提供自己的vector
- 类容器,并实现你自己的push_back()
成员函数。