被这个问题困扰了很多次,有必要整理一下。
当然最好的参考资料就是http://www.cplusplus.com/reference/set/set/erase/ 里的Complexcity部分了,但是有必要记住常见的一些复杂度。否则会掉坑的。
先来看一下vector的erase复杂度:
Linear on the number of elements erased (destructions) plus the number of elements after the last element deleted (moving).
析构函数的复杂度和后面要移动的复杂度,所以一般情况下如果不是删除最后一个(当然删除最后一个直接用pop_back()就可以了)是O(1)外,其它都是O(n),即线性的。
再来看一下set的erase复杂度如下,它有三种情况的erase,复杂度不同
(1)iterator erase (const_iterator position);
(2) size_type erase (const value_type& val);
>(3) iterator erase (const_iterator first, const_iterator last);
For the first version (erase(position)), amortized constant.
For the second version (erase(val)), logarithmic in container size.
For the last versi