容器内部删除一个元素

1) 顺序容器(序列式容器,比如vector、deque)

erase迭代器不仅使所指向被删除的迭代器失效,而且使被删元素之后的所有迭代器失效(list除外),所以不能使用erase(it++)的方式,但是erase的返回值是下一个有效迭代器;

It = c.erase(it);

2) 关联容器(关联式容器,比如map、set、multimap、multiset等)

erase迭代器只是被删除元素的迭代器失效,但是返回值是void,所以要采用erase(it++)的方式删除迭代器;

c.erase(it++)

发表评论

后才能评论

评论(2)

  • 明镜止水 普通 2021-09-20 6:32 下午

    查了很久,对于顺序容器erase、insert后是否失效不同版本是不一样的。如果引起了容器内存重分配,那肯定失效,但若没有引起重分配,至少我在gcc8.1.0上对vector进行erase(it)后,it会自动指向后一个元素,后面的迭代器也不会失效。