大佬教程收集整理的这篇文章主要介绍了有没有像 std::remove() 这样的东西不保留向量的保留元素的顺序?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
std::vector
值,我想删除与给定值匹配的所有元素,并且我不关心在删除后保留元素的顺序。 std::remove
的规范规定保留元素的相对顺序。
@H_696_2@是否有内置算法可以执行 std::remove
之类的操作,但不会保留顺序?我希望这样做,因为将向量末尾的元素交换到要删除的位置的工作量较少,从而扰乱了向量中元素的顺序。该算法仍然是线性的,因为它必须访问每个元素以检查是否被删除,但是如果最终只有少数项目被删除,它必须对每个元素执行的恒定工作量会大大减少。
std::partition()
是一种算法,可以满足您的要求。您需要为要保留的值提供谓词,而不是要删除的值。
@H_696_2@例如,给定 std::vector v;
,而不是
v.erase( std::remove(v.begin(),v.end(),value),v.end() );
@H_696_2@你会写:
v.erase( std::partition(v.begin(),[&](const auto& elem){return elem!=value;}),v.end() );
@H_696_2@然而,这不一定比 std::remove()
更有效。问题在于 std::remove()
不会交换 - 相反,它只会移动元素,将要移除的元素保持在任意移出状态。这可能比交换更有效,尤其是在交换向量元素不便宜的情况下。以上是大佬教程为你收集整理的有没有像 std::remove() 这样的东西不保留向量的保留元素的顺序?全部内容,希望文章能够帮你解决有没有像 std::remove() 这样的东西不保留向量的保留元素的顺序?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。