📅  最后修改于: 2023-12-03 15:29:50.052000             🧑  作者: Mango
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
的元素放在容器的前面,不满足条件的元素放在容器的后面,并保证相对顺序不变。
具体实现方式是维护两个“指针”begin
和end
,初始化时begin
指向第一个元素,end
指向最后一个元素。然后begin
指向的元素和end
指向的元素进行判断,如果满足条件,则begin++
,否则将begin
元素和end
元素交换,然后end--
。直到begin
迭代器和end
迭代器相遇,此时便完成了对容器的划分。
partition()
函数是C++ STL中的一个常用算法函数,它可以快速便捷地对容器进行划分,对于一些需要对容器进行排序、查找等操作的场景,使用该函数可以提高代码执行效率。