cb51a_c++_STL_算法_根据第n个元素排序nth_element
nth_element(b,n,e),比如最大的5个数排序,或者最小的几个数
nth_element(b,n,e,p)
对比:partition()算法,分区算法
error C2675: 一元“++”:“TT88”不定义该运算符或到预定义运算符可接收类型的转换
for (TT88::iterator iter = ideq.begin(); iter != ideq.end(); ++ideq),写错了,应该是++iter
/*cb51a_c++_STL_算法_根据第n个元素排序nth_element nth_element(b,n,e),比如最大的5个数排序,或者最小的几个数 nth_element(b,n,e,p) 对比:partition()算法,分区算法 error C2675: 一元“++”:“TT88”不定义该运算符或到预定义运算符可接收类型的转换 for (TT88::iterator iter = ideq.begin(); iter != ideq.end(); ++ideq),写错了,应该是++iter */ #include <iostream> #include <algorithm> #include <deque> #include <iterator> #include <functional> using namespace std; template <class TT88> void print88(TT88 &ideq) { for (TT88::iterator iter = ideq.begin(); iter != ideq.end(); ++iter) cout << *iter << ' '; cout << endl; } int main() { deque<int> ideq,ideq2; for (int i = 3; i <= 7; ++i) ideq.push_back(i); for (int i = 2; i <= 6; ++i) ideq.push_back(i); for (int i = 1; i <= 5; ++i) ideq.push_back(i); ideq2 = ideq; print88(ideq); nth_element(ideq.begin(), ideq.begin() + 3, ideq.end());//默认less<int>(),升序 cout << "nth_element排序后:" << endl; print88(ideq); cout << "用copy,到输出流迭代器显示:" << endl; copy(ideq.begin(), ideq.begin() + 4, ostream_iterator<int>(cout, " ")); cout << endl; ideq = ideq2; nth_element(ideq.begin(), ideq.begin() + 1, ideq.end(),greater<int>());//降序,大到小 cout << "降序:" << endl; print88(ideq); deque<int>::iterator pos; //pos = partition(ideq.begin(), ideq.end(), bind2nd(greater<int>(), 3)); cout << endl; ideq = ideq2; cout << "分区partition小于等于3放左边,其余放右边" << endl; pos = partition(ideq.begin(), ideq.end(), bind2nd(less_equal<int>(), 3)); print88(ideq); copy(ideq.begin(), pos, ostream_iterator<int>(cout, " ")); return 0; }