[英]STL vector with reverse and pop/push_back cost
我提出算法成本并不是很好,所以我在这里问。
这是一个最初用1000个元素初始化的向量:
vector<unsigned int> mFreeIndexes(1000);
我将持续pop_back / push_back元素到向量,但永远不会push_back超过1000(所以永远不要强制向量重新分配)。
在这种情况下,pop_back / push_back操作是O(1)还是O(n)?
从C ++标准23.3.7.5开始:
void push_back(const T&x);
void push_back(T && x);
备注:如果新大小大于旧容量(...),则会导致重新分配
请注意,它并没有说它不能在其他场景中重新分配,但这将是标准的一个非常不寻常的实现。 我认为你可以放心地假设当仍有容量时push_back
不会重新分配。
pop_back
的东西有点复杂。 该标准没有说明pop_back
上下文中的重新分配。 但它似乎是pop_back
不重新分配的常见实现(没有已知的异常)。 虽然有一些保证,请看:
无论如何,只要你没有超过预定义的大小,你可以安全地假设没有重新分配,复杂性确实是O(1)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.