You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用std::partition处理不可拷贝类元素触发拷贝构造删除错误如何解决

解决方案

你只需要将lambda谓词的传值参数改为const左值引用,即可解决编译报错,同时满足不拷贝元素、直接操作原序列的要求:

  • 你当前的报错完全来自lambda参数的按值传递逻辑,和std::partition算法本身无关。
  • 可行性依据:MyType类已默认实现移动构造、移动赋值运算符,满足std::partition对元素的可移动要求,算法内部重排元素时只会调用移动操作,无拷贝开销。
  • 谓词参数修改逻辑:谓词仅需要读取元素的x成员做判断,不需要修改元素或转移所有权,用const左值引用传递参数不会触发任何拷贝构造逻辑。

修改后的代码如下:

typename std::vector<MyType>::iterator mid = 
    std::partition(begin, end, [xval](const MyType& p){return p.x <= xval;});

执行后原vector会被直接重排,返回的mid迭代器为分区边界:迭代器之前的所有元素都满足p.x <= xval,之后的元素不满足条件,可直接用于后续逻辑处理,无需引入索引列表做间接分区。


内容的提问来源于stack exchange,提问作者Lavaman65

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:24:03