类别: 算法 | 组件类型: 函数 |
template <class ForwardIterator, class T> ForwardIterator remove(ForwardIterator first, ForwardIterator last, const T& value);
vector<int> V; V.push_back(3); V.push_back(1); V.push_back(4); V.push_back(1); V.push_back(5); V.push_back(9); copy(V.begin(), V.end(), ostream_iterator<int>(cout, " ")); // The output is "3 1 4 1 5 9". vector<int>::iterator new_end = remove(V.begin(), V.end(), 1); copy(V.begin(), new_end, ostream_iterator<int>(cout, " ")); // The output is "3 4 5 9".
[1] “移除”的含义有点微妙。移除不会销毁任何迭代器,也不会改变first和last之间的距离。(它不可能做任何这样的事情。)因此,例如,如果V是一个 向量,remove(V.begin(), V.end(), 0)不会改变V.size(): V将包含与之前一样多的元素。移除返回一个迭代器,它指向从其中移除元素后得到的范围的末尾;因此,该迭代器后面的元素不再重要,可以丢弃。如果要从 序列 中移除元素,可以简单地擦除它们。也就是说,从 序列 中移除元素的合理方法是S.erase(remove(S.begin(), S.end(), x), S.end()).