remove if
今天在实际生活中遇到了一个代码,开始感觉很奇怪,够来查阅了书籍之后发现了以前没有注意到的
removeif 是一个重排类型的算法,不会执行容器的操作
泛型算法不会执行容器的操作
#include <algorithm>
this->PowerUps.erase(std::remove_if(this->PowerUps.begin(), this->PowerUps.end(),
[](const PowerUp &powerUp) { return powerUp.Destroyed && !powerUp.Activated; }
), this->PowerUps.end());
函数 remove_if()移除序列[start, end)中所有应用于 lambda 表达式返回 true 的元素.
此函数返回一个指向被修剪的序列的最后一个元素迭代器.
实际上 remove_if()并不会实际移除序列[start, end)中的元素; 如果在一个容器上应用 remove_if(), 容器的长度并不会改变(remove_if()不可能仅通过迭代器改变容器的属性), 所有的元素都还在容器里面.
所以,我们的这里的是这样,显示用 removeif 函数将所有 powerup 中的需要移除的元素全部移到容器的后部分,
返回一个指向这个后面被移动了的函数的迭代器
然后调用 erase 函数将这些元素移除
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于