使用erase删除remove_if

时间:2015-10-08 22:48:28

标签: c++ stl iterator

这件事让我发疯,我无法理解:

// v contains : 101, 1, 2, 3, 4 , 5
v.erase(remove_if(v.begin(), v.end(), bind2nd(less<int>(), 3)), v.end());
// v contains now : 101, 3, 4, 5

为什么在擦除中有v.end()作为第二个参数?我读到remove_if返回一个迭代器到最后一个元素后面没有删除的元素,它是什么意思.... v.erase(v.begin(),v.end())应该擦除所有向量元素,但是在上面的示例中它如何不擦除3,4和5?这个东西怎么样?我没有在网上找到有关它的东西。

1 个答案:

答案 0 :(得分:8)

remove实际上并不删除向量中的任何元素,但会将它们移动到向量的末尾。然后它将迭代器返回到新的最后一个元素,这是第一个“已删除”元素。然后,您从该迭代器擦除到向量的末尾,以实际去除向量中的元素。