📅  最后修改于: 2023-12-03 15:13:56.729000             🧑  作者: Mango
在C++ STL中,partition是一个用于分割元素序列的算法。它可以将一个序列分成两个部分,第一部分满足某个条件,第二部分不满足该条件。该算法定义在
template<class ForwardIt, class UnaryPredicate>
ForwardIt partition(ForwardIt first, ForwardIt last, UnaryPredicate p);
其中,first和last是迭代器,表示待分割的序列的起始和结束位置;p是一个一元谓词,表示分割标准。返回值为一个迭代器,指向分割后第二部分的第一个元素。
以下是一个简单的例子,使用partition函数将一个数列分成奇数和偶数两部分:
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};
auto it = std::partition(v.begin(), v.end(), [](int i){ return i%2==0; });
std::cout << "Odd elements:";
for (auto i = v.begin(); i != it; ++i) {
std::cout << ' ' << *i;
}
std::cout << '\n';
std::cout << "Even elements:";
for (auto i = it; i != v.end(); ++i) {
std::cout << ' ' << *i;
}
std::cout << '\n';
return 0;
}
输出结果为:
Odd elements: 1 3 5 7 9
Even elements: 2 4 6 8
可以看到,程序通过lambda表达式定义的一元谓词来分割数列,返回的迭代器it指向第一个偶数。
需要注意的是,分割后并不保证两部分的元素是有序的,它们的相对位置可能会改变。
另外,由于partition不会保证分割后两部分的相对顺序,其在某些情况下可能会带来不必要的负面影响。如果需要保持原有顺序,可以使用stable_partition算法。
以上就是关于C++ STL中的std::partition的介绍。