如何运用std::partition进行容器分区操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计917个文字,预计阅读时间需要4分钟。
该伪原创内容如下:
常见错误是误以为 std::partition 像 std::sort 那样“整理”数据,结果发现偶数/奇数分组后,偶数之间顺序乱了,还以为是迭代器写错了。
- 适用场景:快速二分类(如把空指针移到末尾、把无效ID过滤到后面)
- 不适用场景:需要按原始顺序输出满足条件的子序列
- 性能上,
std::partition是 O(n),单次遍历;std::stable_partition通常是 O(n log n) 或额外 O(n) 空间
传入的谓词必须是纯函数,不能有副作用
std::partition 内部可能对同一元素多次调用谓词(尤其在某些标准库实现中做优化判断时),如果谓词里修改了外部状态(比如递增计数器、打印日志、改变全局变量),行为不可预测。
本文共计917个文字,预计阅读时间需要4分钟。
该伪原创内容如下:
常见错误是误以为 std::partition 像 std::sort 那样“整理”数据,结果发现偶数/奇数分组后,偶数之间顺序乱了,还以为是迭代器写错了。
- 适用场景:快速二分类(如把空指针移到末尾、把无效ID过滤到后面)
- 不适用场景:需要按原始顺序输出满足条件的子序列
- 性能上,
std::partition是 O(n),单次遍历;std::stable_partition通常是 O(n log n) 或额外 O(n) 空间
传入的谓词必须是纯函数,不能有副作用
std::partition 内部可能对同一元素多次调用谓词(尤其在某些标准库实现中做优化判断时),如果谓词里修改了外部状态(比如递增计数器、打印日志、改变全局变量),行为不可预测。

