首页 文章

使用erase删除remove_if

提问于
浏览
1

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

// 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 回答

  • 8

    remove 实际上并没有删除向量中的任何元素,而是将它们移动到向量的末尾 . 然后它将迭代器返回到新的最后一个元素,即第一个"removed"元素 . 然后,您从该迭代器擦除到向量的末尾,以实际去除向量中的元素 .

相关问题