stl容器中的元素删除方法

STL中元素的删除方法:

问题描述:

对于容器:container<int> c;

要删除其中元素值为1的元素。container为一类容器。

1、  连续内存的容器(vector、deque或string)

采用erase-remove方法

c.erase(remove(c.begin(), c.end(), 1),c.end());

对于list而言,这一方法也适用,但方法2更有效

调用erase不仅会使指向被删除的元素迭代器无效,也会使被删除元素之后的迭代器无效,若要循环删除需要利用erase的返回值——指向紧随被删除元素之后的下一个有效迭代器。

扩展:

vector清空所有元素常用方法(deque也适用,但更常用的是clear):

vector<int> vec;

{

         vector<int>vecTemp;

         vecTemp.swap(vec);

}

注:使用clear来删除元素并不能使vector的size变为0,而对于deque来说使用clear可以使size变为0,

2、  list

list由于其插入和删除的时间是O(1)的,所以其删除也与其他容器不同,采用成员函数remove更为高效

c.remove(1);

 

3、  标准关联容器(set、multiset、map、multimap)

c.erase(1);

当删除容器中的元素时,指向该元素的所有迭代器都将变得无效。当循环删除时可以使用

c.erase(iter++);   //先使iter指向下个元素,再删除当前元素

p. s:不能使用remove操作(因为没有remove成员函数,而使用remove算法可能会覆盖容器的

值)

 

总结:

再说下几点不同:vector等非关联容器的erase和关联容器的erase返回值并不一样,前者返回指向紧随被删除元素之后的下一个有效迭代器,后者返回void。list容器比较特殊,对其进行删除,排序等操作应使用其成员函数(高效而又不会出错)。

最后推荐一下学习stl的书籍:《EffectiveSTL》Scott、《stl 源码剖析》侯捷(对stl还没入门的先找一本入门书看看)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值