|
|
1
13
在
这基本上就是您所链接到的擦除删除习惯用法。
然而,使用
|
|
|
2
13
如何循环遍历向量,对于每个需要删除的元素,将下一个不需要删除的元素复制到该位置。当你到达终点时,截短它。
|
|
|
3
4
首先,不要打电话
我想我要做的第一件事应该和你现在的代码相似:
你可以使用
|
|
|
4
2
使第二个容器成为一个映射,以便它自动为您保持索引排序。
回应评论 维护一个映射的代价与维护另一个结构(列表或向量)然后对其进行排序是最坏的情况。如果你已经这样做了,你最好把它作为一张地图。抱怨地图的开销和排序列表的开销是没有意义的。 对于我建议算法的性能,如果m是要删除的元素数,n是元素总数,则结果是O(n-m)。 当然,这主要是在幽默你试图用一个向量优化。
2-不要维护第二个数据结构,而是在容器中标记需要直接删除的元素。一个简单的方法是使用容器<T>使用容器<std::pair<T,char>,并使用char来跟踪元素状态。 如果执行1和2,则完全删除所有复制并获得更高效的实现。 |
|
|
5
1
什么元素?也许我是认真对待你的文章,但如果你有一个1000个元素的向量,为什么不标记那些不再有效的元素,并在第一时间消除。显然我在这里假设你的元素不需要太多的内存。 我提这个只是因为你好像很关心速度。如果已经给出的建议没有奏效,也许这个想法值得一想!从本质上讲,一开始就不做手术会加快速度。 |
|
|
6
1
如果您有一组(例如无序的)要删除的索引,可以使用:
这是我想到的最快的解决办法。你需要 C++ 11 不过。删除索引2和5处的元素的用法示例:
之后:
编辑: 如果希望对保持索引擦除的容器类型更灵活:
现在您可以使用
Containers Library
提供要删除的索引,只要
|
|
|
7
-1
我写了一个函数,基于Benjamin Lindley的答案 https://stackoverflow.com/a/4115582/2835054
|
|
|
Julia · 矢量中相加为总和S的值的数量 3 年前 |
|
|
C_Rod · 在模板方法中确定STL容器中项目的数据类型 4 年前 |
|
|
quantumwell · 将空向量放入std::map() 8 年前 |
|
|
OutOfBound · 对未初始化内存使用算法的优点 8 年前 |
|
|
DarthRubik · 在使用列表删除之后,迭代器如何不无效 8 年前 |