繁体   English   中英

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

[英]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不重新分配的常见实现(没有已知的异常)。 虽然有一些保证,请看:

pop_back()能否减少向量的容量? (C ++)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM