/*is_partitioned 检测某个范围是否按指定谓词划分过*/ #include#include #include using namespace std; bool IsOdd(int i) {return (i % 2) == 1;} int main(int argc, const char * argv[]) { array foo = {1,2,3,4,5,6,7}; //print contents: cout<<"foo:"; for (int& x:foo) cout<<" "<
输出结果:
foo: 1 2 3 4 5 6 7 (not partitioned) foo: 1 7 3 5 4 6 2 (partitioned)
/*partition 将某个范围划分为两组*/ #include#include #include using namespace std; bool IsOdd(int i) {return (i % 2) == 1;} int main(int argc, const char * argv[]) { vector myvector; vector ::iterator it; //set some values: for (int i = 1; i < 10; ++i) myvector.push_back(i); vector ::iterator bound; bound = partition(myvector.begin(), myvector.end(), IsOdd); //print out content: cout<<"odd elements:"; for (it = myvector.begin(); it != bound; ++it) cout<<" "<<*it; cout<
输出结果:
odd elements: 1 9 3 7 5 even elements: 6 4 8 2
/*partition_copy 拷贝指定范围的划分结果*/ #include#include #include using namespace std; bool IsOdd(int i) {return (i % 2) == 1;} int main(int argc, const char * argv[]) { vector foo; vector odd,even; vector ::iterator it; //set some values: for (int i = 1; i < 10; ++i) foo.push_back(i); unsigned n = (unsigned)count_if(foo.begin(), foo.end(), IsOdd); odd.resize(n); even.resize(foo.size() - n); //partition: partition_copy(foo.begin(), foo.end(), odd.begin(), even.begin(), IsOdd); //print contents: cout<<"odd: "; for (int& x:odd) cout<<" "< 输出结果:
odd: 1 3 5 7 9 even: 2 4 6 8
/*partition_point 返回被划分范围的划分点*/ #include#include #include using namespace std; bool IsOdd(int i) {return (i % 2) == 1;} int main(int argc, const char * argv[]) { vector foo; vector odd; //set some values: for (int i = 1; i < 10; ++i) foo.push_back(i); partition(foo.begin(), foo.end(), IsOdd); auto it = partition_point(foo.begin(), foo.end(), IsOdd); odd.assign(foo.begin(), it); //print contents of odd: cout<<"odd:"; for (int& x:odd) cout<<" "<
输出结果:
odd: 1 9 3 7 5
/*stable_partition 稳定划分,两组元素各维持相对顺序*/ #include#include #include using namespace std; bool IsOdd(int i) {return (i % 2) == 1;} int main(int argc, const char * argv[]) { vector myvector; vector ::iterator it; vector ::iterator bound; for (int i = 1; i < 10; ++i) myvector.push_back(i); bound = stable_partition(myvector.begin(), myvector.end(), IsOdd); //print out content: cout<<"odd elements:"; for (it = myvector.begin(); it != bound ; ++it) cout<<" "<<*it; cout< 输出结果:
odd elements: 1 3 5 7 9 even elements: 2 4 6 8