使用自定义分配器修改增长策略
Modifying growing strategy using custom allocator
我不是自定义分配器的用户,但我想知道是否可以使用自定义分配器来重新定义增长策略。例如,在大多数实现中,std::vector
呈几何增长。是否有可能改变这种算术增长策略,比如每次需要重新分配时添加 10 个元素。如果答案是肯定的,那么该怎么做?
没有。重新分配策略由 vector
定义,而不是由它使用的分配器定义。分配器仅用于提供内存——由 vector
本身决定提供多少内存。
标准规定 push_back
是摊销常数时间。来自 [vector.modifiers]
Complexity: The complexity is linear in the number of elements inserted plus the distance to the end
of the vector.
由于 push_back
必须是 O(1)
,因此 vector
的增长策略不能是算术 - 否则我们会有线性时间插入。
要执行您想要的操作,您必须提供您自己的 vector
类容器并实现您自己的 push_back()
成员函数。
我不是自定义分配器的用户,但我想知道是否可以使用自定义分配器来重新定义增长策略。例如,在大多数实现中,std::vector
呈几何增长。是否有可能改变这种算术增长策略,比如每次需要重新分配时添加 10 个元素。如果答案是肯定的,那么该怎么做?
没有。重新分配策略由 vector
定义,而不是由它使用的分配器定义。分配器仅用于提供内存——由 vector
本身决定提供多少内存。
标准规定 push_back
是摊销常数时间。来自 [vector.modifiers]
Complexity: The complexity is linear in the number of elements inserted plus the distance to the end of the vector.
由于 push_back
必须是 O(1)
,因此 vector
的增长策略不能是算术 - 否则我们会有线性时间插入。
要执行您想要的操作,您必须提供您自己的 vector
类容器并实现您自己的 push_back()
成员函数。