#include <iostream> #include <algorithm> #include <vector> #include <string> #include <functional> #include <cstdlib> #include <iterator> using namespace std; struct Student { char name[20]; int grade; }; bool GradeCmp(Student & s) { return s.grade < 75; } ostream & operator << (ostream & os, const Student &s) { os << "( "<<s.name << "/t" << s.grade << " )"; return os; } int main(int argc, char *argv[]) { Student s[] = {{"li1",79},{"li2", 70},{"li3", 68},{"li4",78},{"li5",65}}; cout << "学生的原始序列:" << endl; copy(s, s+5, ostream_iterator<Student>(cout, " ")); cout << endl; vector<Student> v1(s, s+5); cout << "不稳定的划分,成绩<75(partition):" << endl; partition(v1.begin(),v1.end(), GradeCmp); copy(v1.begin(), v1.end(),ostream_iterator<Student>(cout, " ")); cout << endl; vector<Student> v2(s, s+5); cout << "稳定划分,成绩<75(stable_partition):" << endl; stable_partition(v2.begin(), v2.end(), GradeCmp); copy(v2.begin(), v2.end(), ostream_iterator<Student>(cout, " ")); cout << endl; system("pause"); return 0; } 主要函数 //partition template<class BidIt, class Pred> BidIt parttion(BidIt first, BidIt last, Pred pr); //函数功能是:容器元素重新定位,确定位置K,当0<N<K时,pr(*(first+N));当K<=N<last-first时, pr(*(first+N))是false.函数最终返回的first+K //stable_partition template<class FwdIt, class Pred> FwdIt stable_partiton(FwdIt first, FwdIt last, Pred pr) //稳定划分 example #include <iostream> #include <algorithm> #include <vector> #include <functional> #include <iterator> using namespace std; int main(int argc, char *argv[]) { int a[] = {1, 7, 2, 5, 3, 4, 8, 2, 3, 6}; vector<int> v1(a, a+10); cout << "原始数据为:"; copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " ")); cout << endl; cout << "按4条件划分(partition):"; partition(v1.begin(), v1.end(), bind2nd(less<int>(), 4)); copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, " ")); cout << endl; vector<int> v2(a, a+10); cout << "按4条件划分(stable_partition):"; stable_partition(v2.begin(), v2.end(), bind2nd(less<int>(), 4)); copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, " ")); cout << endl; system("pause"); return 0; } stable_partition