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

Eri*_*ric 2 c++ stl

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

sel*_*tze 7

没有,remove并且remove_if只在序列中四处移动的物体.您需要调用erase来使序列实际上更短.remove和remove_if的返回值是您可以在erase调用中使用的迭代器,以缩短序列:

sequence.erase(remove(...),sequence.end());
Run Code Online (Sandbox Code Playgroud)


pmr*_*pmr 6

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

这里这里的例子很好地说明了这种差异.