在stl容器中移除元素的恒定时间

时间:2017-04-12 14:43:04

标签: c++ stl

简单问题:是否有任何STL容器允许我在恒定时间内删除当前迭代器位置? 提前谢谢!

3 个答案:

答案 0 :(得分:2)

至少std :: list允许在恒定时间内擦除元素。

答案 1 :(得分:2)

std::list erase具有复杂性:

  

复杂性

     

1)常数。

     

2)第一个和最后一个之间的距离是线性的。

对于案例2,您可以对一系列元素使用erase。

来自文档的

std::list<T>::erase看起来像这样:

//(1)
iterator erase( iterator pos );
iterator erase( const_iterator pos );
//(2)   
iterator erase( iterator first, iterator last );
iterator erase( const_iterator first, const_iterator last );

另一个是std::forward_list(不完全相同,因为它只有erase_after

答案 2 :(得分:1)

如果您不需要维护元素的顺序,可以将std::vector与“swap and pop”一起使用 - 将要删除的元素与向量中的最后一个元素交换,然后弹出新的最后一个元素。