繁体   English   中英

与remove_if一起使用擦除

[英]using erase with remove_if

这件事使我发疯,我听不懂:

// 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? 这东西是怎么工作的? 我没有在互联网上找到有关它的东西。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM