我提出算法成本并不是很好,所以我在这里问。
这是最初用1000个元素初始化的向量:
vector<unsigned int> mFreeIndexes(1000);
我将持续pop_back / push_back元素到向量,但从不push_back超过1000(所以永远不要强制向量重新分配)。
在这种情况下,pop_back / push_back操作是O(1)还是O(n)?
答案 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)。