程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了有没有像 std::remove() 这样的东西不保留向量的保留元素的顺序?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决有没有像 std::remove() 这样的东西不保留向量的保留元素的顺序??

开发过程中遇到有没有像 std::remove() 这样的东西不保留向量的保留元素的顺序?的问题如何解决?下面主要结合日常开发的经验,给出你关于有没有像 std::remove() 这样的东西不保留向量的保留元素的顺序?的解决方法建议,希望对你解决有没有像 std::remove() 这样的东西不保留向量的保留元素的顺序?有所启发或帮助; @H_696_2@在 C++14 中,我有一个 std::vector 值,我想删除与给定值匹配的所有元素,并且我不关心在删除后保留元素的顺序。 std::remove 的规范规定保留元素的相对顺序。

@H_696_2@是否有内置算法可以执行 std::remove 之类的操作,但不会保留顺序?我希望这样做,因为将向量末尾的元素交换到要删除的位置的工作量较少,从而扰乱了向量中元素的顺序。该算法仍然是线性的,因为它必须访问每个元素以检查是否被删除,但是如果最终只有少数项目被删除,它必须对每个元素执行的恒定工作量会大大减少。

解决方法

@H_696_2@是否有内置算法可以执行 std::remove 之类的操作,但不会保留顺序?我希望这样做,因为只需将向量末尾的元素交换到要删除的位置即可

@H_696_2@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,请注明来意。
标签: