📜  C++ STL-algorithm.partition()函数(1)

📅  最后修改于: 2023-12-03 15:29:50.052000             🧑  作者: Mango

C++ STL-algorithm.partition()函数

简介

partition()函数是C++ STL中的一个算法函数,它可以将容器中的元素根据指定条件进行划分,将满足条件的元素排列在容器的前面,而不满足条件的元素排列在容器的后面,并返回一个迭代器,指向第一个不满足条件的元素。

该函数的定义如下:

template <class ForwardIterator, class UnaryPredicate>
ForwardIterator partition (ForwardIterator first, ForwardIterator last, UnaryPredicate pred);
参数
  • first:指向容器的第一个元素的迭代器。
  • last:指向容器的最后一个元素后面的迭代器。
  • pred:一个函数对象,用于指定划分的条件。
返回值

该函数会返回一个迭代器,指向第一个不满足条件的元素。

示例

下面是一个使用partition()函数的示例:

#include <algorithm>
#include <vector>
#include <iostream>

int main()
{
    std::vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};

    // 将偶数放在前面,奇数放在后面
    auto it = std::partition(nums.begin(), nums.end(), [](int n){ return n % 2 == 0; });

    for (auto i : nums)
        std::cout << i << ' ';
    std::cout << "\n";

    std::cout << "First odd element: " << *it << "\n";

    return 0;
}

运行结果为:

8 2 6 4 5 3 7 1 9 
First odd element: 5
实现原理

在默认情况下,partition()函数会将满足条件pred的元素放在容器的前面,不满足条件的元素放在容器的后面,并保证相对顺序不变。

具体实现方式是维护两个“指针”beginend,初始化时begin指向第一个元素,end指向最后一个元素。然后begin指向的元素和end指向的元素进行判断,如果满足条件,则begin++,否则将begin元素和end元素交换,然后end--。直到begin迭代器和end迭代器相遇,此时便完成了对容器的划分。

总结

partition()函数是C++ STL中的一个常用算法函数,它可以快速便捷地对容器进行划分,对于一些需要对容器进行排序、查找等操作的场景,使用该函数可以提高代码执行效率。