| 类别: 算法 | 组件类型: 函数 |
template <class ForwardIterator, class Predicate>
ForwardIterator remove_if(ForwardIterator first, ForwardIterator last,
Predicate pred);
vector<int> V;
V.push_back(1);
V.push_back(4);
V.push_back(2);
V.push_back(8);
V.push_back(5);
V.push_back(7);
copy(V.begin(), V.end(), ostream_iterator<int>(cout, " "));
// The output is "1 4 2 8 5 7"
vector<int>::iterator new_end =
remove_if(V.begin(), V.end(),
compose1(bind2nd(equal_to<int>(), 0),
bind2nd(modulus<int>(), 2)));
V.erase(new_end, V.end()); [1]
copy(V.begin(), V.end(), ostream_iterator<int>(cout, " "));
// The output is "1 5 7".
[1] “移除” 的含义有些微妙。Remove_if不会销毁任何迭代器,也不会改变first和last之间的距离。(它无法执行任何类似的操作)。例如,如果V是一个 向量,remove_if(V.begin(), V.end(), pred)不会更改V.size(): V将包含与之前一样多的元素。Remove_if返回一个指向结果范围末尾的迭代器,其中元素已被移除;由此可见,该迭代器之后的元素无关紧要,可以丢弃。如果从 序列 中移除元素,则可以直接将其擦除。也就是说,从 序列 中移除元素的一种合理方法是S.erase(remove_if(S.begin(), S.end(), pred), S.end()).