本节所列的算法是根据元素值或某一准则,在一个区间内移除某些元素。

这些算法并不能改变元素的数量,它们只是将原本置于后面的“不移除元素”向前移动,覆盖那些被移除的元素。

这些算法都返回逻辑上的新终点

 

移除某些特定元素

1.移除某序列内的元素

ForwardIterator

remove(ForwardIterator beg,ForwardIterator end,

             const T& value)

ForwardIterator

remove_if(ForwardIterator beg,ForwardIterator end,

                 UnaryPredicate op)

1.remove()会移除区间[beg,end)中每一个“与value相等”的元素

2.remove_if()会移除区间[beg,end)中每一个“令以下一元判断式”: op(elem) 为true的元素。

 

下面程序示范remove()和remove_if()的用法:

 1 #include "algostuff.hpp"
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     vector<int> coll;
 7     INSERT_ELEMENTS(coll,2,6);
 8     INSERT_ELEMENTS(coll,4,9);
 9     INSERT_ELEMENTS(coll,1,7);
10     PRINT_ELEMENTS(coll,"coll:     ");
11     vector<int>::iterator pos;
12     pos=remove(coll.begin(),coll.end(),5);
13     PRINT_ELEMENTS(coll,"size not changed: ");
14     coll.erase(pos,coll.end());
15     PRINT_ELEMENTS(coll,"size changed: ");
16     coll.erase(remove_if(coll.begin(),coll.end(),
17                          bind2nd(less<int>(),4)),coll.end());
18     PRINT_ELEMENTS(coll,"< 4 removed: ");
19 }
View Code

相关文章: