partition函数和stable_partition函数的小示例
发布日期:2021-05-20 07:54:53 浏览次数:24 分类:精选文章

本文共 1566 字,大约阅读时间需要 5 分钟。

C++标准库中 partition 和 stable_partition 函数的分析与演示

partition 函数演示

代码

#include 
#include
using namespace std;int main() { vector
V = {2, 3, 6, 7, 1, 5, 4}; partition(V.begin(), V.end(), [](int a) { return a % 2 == 0; }); for (int v : V) { printf("%d ", v); } return 0;}

结果

通过上述代码,可以看到 partition 函数的作用是将集合中的元素按照给定的筛选规则划分到目标范围内。这里选择了偶数作为条件,所有满足条件的偶数会被移动到集合的前半部分。

分析

partition 函数的核心定义是:

template_type partition(    iterator begin,    iterator end,    unary_predicate pred);
  • 迭代器 1 和迭代器 2告知 partition 函数需要处理的容器范围
  • 筛选规则(pred),类似于 sort() 中的 cmp;可以使用 lamdba 表达式来实现
  • 是否需要保持元素的稳定性:partition 函数会改变元素的位置,因此需要注意元素的相对顺序可能会变化
  • 比较重要的一点是,partition 函数的一个关键特点是:它将所有满足条件的元素放置在目标区域*(前一部分或后一部分)*,但这些元素的相对顺序会保持与原有顺序一致
  • stable_partition 函数演示

    代码

    #include 
    #include
    using namespace std;int main() { vector
    V = {2, 3, 6, 7, 1, 5, 4}; stable_partition(V.begin(), V.end(), [](int a) { return a % 2 == 0; }); for (int v : V) { printf("%d ", v); } return 0;}

    结果

    通过上述代码,可以看到 stable_partition 函数的作用与 partition 函数相似,但它在操作过程中会尽量保持元素的相对位置不变。

    分析

    stable_partition 函数的定义与 partition 函数基本相同:

    template_type stable_partition(    iterator begin,    iterator end,    unary_predicate pred);
  • 迭代器 1 和迭代器 2告知 stable_partition 函数需要处理的容器范围
  • 筛选规则(pred),与 partition 一样
  • 保持元素的稳定性:stable_partition 函数的设计初衷是为了在排序过程中保持元素的相对位置
  • 在处理过程中,它仍然会将符合筛选规则的元素放置在目标区域,但这些元素的相对顺序保持不变
  • 扩展阅读

    如果需要更深入地了解 partitionstable_partition 函数的实现细节,建议参考以下资源:

  • C++ 标准库文档
  • 《Effective C++》一书中有关排序算法的部分
  • C++ 的标准 aware 因子库的相关文档
  • 上一篇:二维vector的一些细节(用于实现LeetCode566.重塑矩阵)
    下一篇:C++11 for循环的新写法(用于实现LeetCode238.移除零)

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年05月03日 02时47分32秒