具有反向和pop / push_back成本的STL向量

时间:2017-09-12 13:32:47

标签: c++ stl

我提出算法成本并不是很好,所以我在这里问。

这是最初用1000个元素初始化的向量:

vector<unsigned int> mFreeIndexes(1000);

我将持续pop_back / push_back元素到向量,但从不push_back超过1000(所以永远不要强制向量重新分配)。

在这种情况下,pop_back / push_back操作是O(1)还是O(n)?

1 个答案:

答案 0 :(得分:3)

来自C ++标准23.3.7.5:

  

void push_back(const T&amp; x);

     

void push_back(T&amp;&amp; x);

     

备注:如果新大小大于旧容量(...)

,则会导致重新分配

请注意,它并没有说它无法在其他方案中重新分配,但这将是标准的一个非常不寻常的实现。我认为您可以放心地假设push_back在仍有容量的情况下不会重新分配。

pop_back的事情有点复杂。该标准没有说明pop_back上下文中的重新分配。但似乎是pop_back没有重新分配的常见实现(没有明确的例外)。但是有一些保证,请看:

Can pop_back() ever reduce the capacity of a vector? (C++)

无论如何,只要你不超过预定义的大小,就可以安全地假设没有重新分配,复杂性确实是O(1)。