erase和remove / remove_if算法之间的区别?

时间:2010-06-13 10:48:53

标签: c++ stl

算法remove和remove_if与成员函数erase之间的区别是什么? 它们都会导致调用已删除的对象析构函数吗?

4 个答案:

答案 0 :(得分:7)

不,removeremove_if仅在序列中移动对象。您需要调用erase来使序列实际上更短。 remove和remove_if的返回值是您可以在erase调用中使用的迭代器,以缩短序列:

sequence.erase(remove(...),sequence.end());

答案 1 :(得分:6)

不,std::remove_if会将与谓词不匹配的元素移动到列表末尾,并将迭代器返回到新的“end”。擦除将有效地从容器中删除元素(调用dtor)。

示例herehere充分说明了这种差异。

答案 2 :(得分:0)

很简单,std :: remove使用一个值来确定元素是否被删除"而std :: remove_if使用谓词函数。

答案 3 :(得分:-1)

无论您使用何种方法/功能,都会在删除项目时始终调用析构函数。