📅  最后修改于: 2023-12-03 15:29:50.080000             🧑  作者: Mango
stable_partition()
是C ++ STL中的一个算法函数,它可用于将序列分成两个部分,其中一个部分满足给定条件谓词,而另一个部分则不满足该条件谓词。同时,它可以保持原有的序列中元素的相对位置。
下面是stable_partition()
函数的函数原型:
template< class BidirIt, class UnaryPredicate >
BidirIt stable_partition( BidirIt first, BidirIt last, UnaryPredicate p );
参数列表如下:
first
:要排序的序列的开始位置的迭代器(包括)last
:要排序的序列的结束位置的迭代器(不包括)p
:谓词,用于将序列分成两个部分stable_partition()
函数通过按照谓词p
所给出的条件,将序列[first, last)
中满足条件p
的元素放在序列的前面,不满足条件的元素放在后面。更具体地说,函数会将序列分为两个区间,第一个区间的所有元素都满足条件p
,第二个区间的所有元素都不满足该条件,并且它们保持序列中原有元素的顺序不变。
函数返回位置p(x)
不满足的第一个元素的迭代器。这意味着,所有在此之前的元素都满足条件,所有在此之后的元素都不满足该条件。
下面是一个示例程序,它演示了如何使用stable_partition()
函数。在本例中,我们使用了一个谓词函数,该函数检查给定数字是否为奇数。函数stable_partition()
将数组分成两个部分,一个部分包含所有的奇数,另一个部分包含所有的偶数。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool odd(int i) { return (i % 2) == 1; }
int main()
{
vector<int> v{ 2, 3, 1, 2, 5, 10, 7, 8, 5, 9 };
cout << "Original vector : ";
for (auto i : v) { cout << i << " "; }
// Using stable_partition()
auto it = stable_partition(v.begin(), v.end(), odd);
cout << "\nPartitioned vector : ";
for (auto i : v) { cout << i << " "; }
cout << "\nFirst part of partitioned vector : ";
for (auto i = v.begin(); i != it; ++i) { cout << *i << " "; }
cout << "\nSecond part of partitioned vector : ";
for (auto i = it; i != v.end(); ++i) { cout << *i << " "; }
return 0;
}
下面是上面程序的输出:
Original vector : 2 3 1 2 5 10 7 8 5 9
Partitioned vector : 3 1 5 7 5 9 2 2 10 8
First part of partitioned vector : 3 1 5 7 5 9
Second part of partitioned vector : 2 2 10 8
可以看到,stable_partition()
函数将序列分成了两个部分,其中一个部分包含所有的奇数,另一个部分包含所有的偶数,并且它们保持了原有的序列中元素的相对位置。
stable_partition()
函数可用于所有双向迭代器。它遵守C++ STL中的迭代器随机访问等级要求。 它还遵守输入、输出迭代器的要求。
stable_partition()
函数是一个非常有用的函数,它可用于将序列分成两个部分,其中一个部分满足给定条件谓词,而另一个部分则不满足该条件谓词。同时,它可以保持原有的序列中元素的相对位置。