天天看点

vector中的删除,earse和remove的小疑惑--【STL】

对于vector容器的使用,平时只是简单的进行遍历查找一下,未曾进行其它操作,这不,今天出了一点差错;

erase方法的操作是将此时的节点删除,然后指向被删除节点的下一个:

如对数据1 6 6 4 7;

进行如上操作的结果为:

vector中的删除,earse和remove的小疑惑--【STL】

有一个6未成功删除,由于每次循环后都将迭代器arr++,在成功删除之后节点后移了一位,实际上在删除进行时是后移了两位,故而在删除时:

有了arr--操作,就可抵消删除时的自动后移,从而成功进行:

vector中的删除,earse和remove的小疑惑--【STL】

当然,erase还有另外一个方法,就是删除两个节点之间的全部元素,这时依靠remove操作将等于删除值的节点全部移到容器末尾,进行删除;

将上述for循环删除的注释,将其上一行的vec.erase(remove(vec.begin(), vec.end(), 6), vec.end());注释取消即可实现;

o(∩_∩)o

继续阅读