【问题标题】:Partitioning an array about a pivot C++关于枢轴 C++ 对数组进行分区
【发布时间】:2018-03-08 08:55:20
【问题描述】:

我正在尝试将一个数组划分为两个区域 S1 和 S2。枢轴必须是数组的第一个元素。所以,例如:

7 5 9 2 6

7 是支点。

我想要 S1 区域;小于枢轴的数字

S2 区域;大于枢轴的数字。

像这样:

5 2 6 7 9

如何用 C++ 语言实现这个?

【问题讨论】:

    标签: c++ arrays partition


    【解决方案1】:

    你可以使用std::stable_partition

    #include <iostream>
    #include <algorithm>
    #include <vector>
    
    int main()
    {
        std::vector<int> v{7,5,9,2,6};
        std::stable_partition(v.begin(), v.end(), [x=v[0]](int n){return n<x;});
        for (int n : v) {
            std::cout << n << ' ';
        }
        std::cout << '\n';
    }
    

    输出

    5 2 6 7 9
    

    Demo

    【讨论】:

    • 我认为 lambda 可以只按值捕获枢轴,而不是捕获整个向量。
    • @NickyC 是的,这很有意义..只需要第一个值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    相关资源
    最近更新 更多