泛型算法:根据是否满足条件划分算法is_partitioned()、partition_copy()、partition_point()、stable_partition()、partition()

1、is_partitioned()

一个序列中如果满足某一条件的元素全都都在前面、不满足该条件的元素全部在后面则is_partitioned()返回true,否则返回false。

#define debug qDebug()<<
int main(int argc, char *argv[])
{
    QList<int> list = {8, 9, 1, 2, 3, 4, 5, 6};
    bool result;
    result = std::is_partitioned(list.begin(), list.end(), [](const int & value)
    {
        return value > 7;
    });
    debug result;
}

这里条件是值大于7,大于7的8、9在序列前面,不大于的都在后面。返回true。

把9移到1前面,大于7的数全部在前面就不成立了,返回false。 

2、partition_copy()

partition_copy()将序列中满足和不满足条件的元素分别复制到两个序列

#define debug qDebug()<<
int main(int argc, char *argv[])
{
    QList<int> list = {8, 1, 9, 2, 3, 4, 5, 6};
    QList<int> list2,list3;
    auto result = std::partition_copy(list.begin(), list.end(),
                                      std::back_inserter(list2),std::back_inserter(list3),
                                      [](const int & value)
    {
        return value > 7;
    });
    debug list2;
    debug list3;
}

满足大于7的元素和不满足大于7的元素分别被复制到一个序列。

3、partition_point()

返回满足条件的第一个子序列的end迭代器

#define debug qDebug()<<
int main(int argc, char *argv[])
{
    QList<int> list = {1, 8, 12, 2, 3, 4, 9,66, 5, 6};
    auto result = std::partition_point(list.begin(), list.end(), [](const int & value)
    {
        return value > 7;
    });

    if(result != list.end())
    {
        debug *result;
    }
}

这个序列含有两个满足大于7的子序列,返回第一个子序列的end迭代器。

4、stable_partition()

将满足条件的元素放到前面,不满足条件的元素放到后面

#define debug qDebug()<<
int main(int argc, char *argv[])
{
    QList<int> list = {1, 8, 12, 2, 3, 4, 9,66, 5, 6};
    std::stable_partition(list.begin(), list.end(), [](const int & value)
    {
        return value > 7;
    });

    debug list;
}

stable_partition()会保证输出序列在原来序列的相对顺序。

5、partition()

和stable_partition()类似,但不会保证结果序列在原来序列的相对顺序

#define debug qDebug()<<
int main(int argc, char *argv[])
{
    QList<int> list = {1, 8, 12, 2, 3, 4, 9,66, 5, 6};
    auto result = std::partition(list.begin(), list.end(), [](const int & value)
    {
        return value > 7;
    });

    debug list;
    debug *result;
}

partition()返回满足条件子序列的end迭代器。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值