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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在stl容器中移除元素的恒定时间相关的知识,希望对你有一定的参考价值。

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

答案

std::listerase复杂性:

复杂

1)常数。

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

对于案例2,您在一系列元素中使用擦除。

来自文档,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

另一答案

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

另一答案

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

以上是关于在stl容器中移除元素的恒定时间的主要内容,如果未能解决你的问题,请参考以下文章

结束一个片段

从 DOM 中移除的元素中取消绑定事件

LeetCode 2091. 从数组中移除最大值和最小值

使用导航组件时从 BottomNavigationView 中移除 Badge

为啥元素从 DOM 中移除后仍可访问?

从二维平衡 KD-Tree 中移除元素