类别: 算法 | 组件类型: 函数 |
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()).