📅  最后修改于: 2023-12-03 14:59:45.498000             🧑  作者: Mango
C++ STL中的algorithm库提供了is_partitioned()函数,这个函数用来检查一个序列是否被分割成了两个不同满足条件的序列。若序列被分割成两个满足条件的序列则返回true,否则返回false。is_partitioned()函数接受三个参数:待检查序列的首迭代器,待检查序列的尾迭代器和分割条件的谓词函数。
template<class InputIterator, class UnaryPredicate>
bool is_partitioned(InputIterator first, InputIterator last, UnaryPredicate pred);
如果序列被分割成两个满足条件的序列,则返回true;否则返回false。
以下是is_partitioned()函数的一个例子:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool is_odd(int i) { return (i%2)==1; }
int main () {
int myints[] = {1,2,3,4,5,6,7,8,9}; // myints: 1 2 3 4 5 6 7 8 9
vector<int> v(myints,myints+9);
vector<int>::iterator bound;
bound = partition(v.begin(), v.end(), is_odd); // v: 1 3 5 7 9 2 4 6 8
if (is_partitioned(v.begin(),bound,is_odd))
cout << "odd numbers: ";
else
cout << "not partitioned ";
for (vector<int>::iterator it=v.begin(); it!=bound; ++it)
if (is_odd(*it)) cout << *it << ' '; // odd numbers: 1 3 5 7 9
cout << endl;
if (is_partitioned(bound,v.end(),is_odd))
cout << "even numbers: ";
else
cout << "not partitioned ";
for (vector<int>::iterator it=bound; it!=v.end(); ++it)
if (!is_odd(*it)) cout << *it << ' '; // even numbers: 2 4 6 8
cout << endl;
return 0;
}
在上面的例子中我们使用了一个谓词函数is_odd(),该函数检查一个整数是否为奇数。我们首先使用partition()函数将v序列分为了两个序列,一个是奇数序列,一个是偶数序列。然后我们调用is_partitioned()函数检查这两个序列是否合法。如果合法则输出序列中的奇数和偶数。注意,以上例子中is_odd()函数的定义和partition()函数的定义在algorithm库中已经提供了。