重排和分区
random_shuffle()
:随机重排partition()
:
- 数据分区,符合规则的数据前移。
- 返回迭代器,指向分区后中间的位置。
- 谓词决定分区规则。
- 分区不稳定。
stable_partition()
:
#include <iostream>
#include <vector>
#include <list>
#include <set>
#include <algorithm>
#include <functional>
#include <iterator>
using namespace std;
int main()
{
vector<int> ivec, ivec2, ivec3;
for (int i = 1; i <= 9; ++i)
{
ivec.push_back(i);
ivec2.push_back(i);
ivec3.push_back(i);
}
cout << "ivec中的数据:" << endl;
for (vector<int>::iterator iter = ivec.begin();
iter != ivec.end(); ++iter)
cout << *iter << ' ';
cout << endl;
cout << "ivec随机打乱后的数据:" << endl;
random_shuffle(ivec.begin(), ivec.end());
for (vector<int>::iterator iter = ivec.begin();
iter != ivec.end(); ++iter)
cout << *iter << ' ';
cout << endl << endl;
cout << "ivec2中原始的数据:" << endl;
for (vector<int>::iterator iter = ivec2.begin();
iter != ivec2.end(); ++iter)
cout << *iter << ' ';
cout << endl;
vector<int>::iterator pos1;
pos1 = partition(ivec2.begin(), ivec2.end(), not1(bind2nd(modulus<int>(), 2)));
cout << "ivec2分区后的数据:" << endl;
for (vector<int>::iterator iter = ivec2.begin();
iter != ivec2.end(); ++iter)
cout << *iter << ' ';
cout << endl << endl;
cout << "ivec3中原始的数据:" << endl;
for (vector<int>::iterator iter = ivec3.begin();
iter != ivec3.end(); ++iter)
cout << *iter << ' ';
cout << endl;
vector<int>::iterator pos2;
pos1 = stable_partition(ivec3.begin(), ivec3.end(), not1(bind2nd(modulus<int>(), 2)));
cout << "ivec3分区后的数据:" << endl;
for (vector<int>::iterator iter = ivec3.begin();
iter != ivec3.end(); ++iter)
cout << *iter << ' ';
cout << endl << endl;
return 0;
}