我不是很好想出算法成本,所以我在这里问。STL向量与反向和弹出/ push_back成本
这里是最初与1000个元素初始化的向量:
vector<unsigned int> mFreeIndexes(1000);
我将不断pop_back /的push_back元素到矢量,但从来没有的push_back超过1000(所以从来力矢量来重新分配)。
在这种情况下,pop_back/push_back操作是O(1)还是O(n)?
我不是很好想出算法成本,所以我在这里问。STL向量与反向和弹出/ push_back成本
这里是最初与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:
空隙的push_back(常量Ť& X);
void push_back(T & & x);
备注:导致重新分配,如果新的大小比原来容量(...)
注意,它不说,它不能在其他情况下重新分配更高,但是这将是该标准非常不寻常的实现。我认为你可以放心地认为push_back
在有容量时不会重新分配。
pop_back
的东西有点复杂。该标准没有在pop_back
上下文中说明重新分配的任何内容。但它似乎是一个常见的实现(不知道例外),pop_back
不会重新分配。还有一些担保虽然看到:
Can pop_back() ever reduce the capacity of a vector? (C++)
反正只要你不走了预定义的大小你是安全的假设,没有发生重新分配和复杂性确实是O(1)。
只要没有重新分配,它应该是O(1)。 –
当你'push_back'你*添加*元素的向量。在上述定义之后,如果你做了'mFreeIndexes.push_back(1);'那么矢量将有1001个元素。也许你想要['reserve'](http://en.cppreference.com/w/cpp/container/vector/reserve)函数? –
此问题已在[documentation](http://en.cppreference.com/w/cpp/container/vector/pop_back)中得到解答。 – nwp