Effective_STL 学习笔记(三十二) 如果真的想删除东西的话就在类似于 remove 的算法后接上 erase

remove 的声明:

1   template<class ForwardIterator, class T>
2   ForwardIterator remove( ForwardIterator first, ForwardIterator last, const T & value );

remove 接收指定它操作的元素区间的一对迭代器,不接收一个容器,所以不知道作用与哪个容器

remove 并不 “真的” 删除东西,因为它做不到

从容器中除去一个元素,唯一的方法是调用那个容器的一个成员函数,几乎都是 erase 的某种形式

remove 移动指定区间中的元素直到所有 “不删除” 元素在区间的开头(相对位置和原来它们的一样)

它返回一个指向最后一个的下一个 “不删除的” 元素的迭代器,返回值是区间的 “新逻辑终点”

如果真的要删除东西的话,应该在 remove 后面接上 erase

1   vector<int> v;
2   v.erase( remove( v.begin(), v.end(), 99 ), v.end() );
3   cout << v.size(); 

把 remove 的返回值作为 erase 区间形式第一个实参传递,是个惯用法。

remove-list,整合到 list 的成员函数 remove 中

1   list<int> li;   // 建立一个 list
2   li.remove(99);   // 删除所有等于 99 的元素,
3      // STL 中唯一的一个名叫 remove 又能从容器中去除元素的函数

在关联容器中类似的 remove_erase 函数叫 erase

同理,类似remove 算法:remove_if 和 unique 要删除东西

成对调用 unique 和 erase, unique 在 list 中类似于remove

原文地址:https://www.cnblogs.com/kidycharon/p/10039889.html