移除容器中与某值相等的元素

1. vector容器


1.1 只移除“与某值相等”的第一个元素


思路:利用算法寻找该值的位置,删除该位置指向的元素。

vector<int> coll;
...
// 利用<algorithm>提供的算法find(),返回与val值相等的第一个元素(位置)
auto pos = find(coll.begin(), coll.end(), val);

// 删除与该值相等的第一个元素
if(pos != coll.end())
{
    coll.erase(pos);
}

1.2 移除“与某值相等”的的所有元素


vector并没有提供任何函数可以直接移除“与某值相等”的所有元素。这是算法发挥威力的时候。注意:无关联容器提供了这样的函数,参见:2.2节。

vector<int> coll;
...
// remove all elements with value val 
coll.erase(remove(coll.begin(), coll.end(), val), coll.end());

思考:为什么remove操作后,还要再嵌套一个erase?

算法应用:http://blog.csdn.net/ifumi/article/details/50937601

2. unodered_multimap/unodered_multiset容器


2.1 只移除“与某值相等”的重复元素中的第一个元素


如果一个unodered_multimap/unodered_multiset容器内含有重复元素,且只想移除其中的第一个元素,不可使用erase()。应该这样做:

unordered_multimap<Key, T> coll;
...
// remove first element with passed value val
auto pos = find(val);

if(pos != coll.end())
{
    coll.erase(pos);
}

思考:这里使用了无关联容器中的成员函数find() ,而不是算法find(),前者快速。与1.1中使用的find(beg, end, val)作比较。

2.2 移除“与某值相等”的重复元素中的所有元素


无关联容器提供的erase()移除元素的操作:

  • c.erase(val) :移除“与val相等”的所有元素,返回被移除元素的个数;
  • c.erase(pos) :移除itrator位置pos上的元素,无返回值;
  • c.erase(beg, end) :移除区间[beg, end)内的所有元素,无返回值。

因此,移除“与某值相等”的重复元素中的所有元素就很简单了:

unordered_multimap<Key, T> coll;
...
// remove all element with passed value val
coll.erase(val);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值