《C++ partition》由会员分享,可在线阅读,更多相关《C++ partition(3页珍藏版)》请在金锄头文库上搜索。
1、C+ partitiontemplate BidirectionalIterator partition ( BidirectionalIterator first,BidirectionalIterator last, Predicate pred );Partition range in twoRearranges the elements in the range first,last), in such a way that all the elements for which pred returns true precede all those for which it retur
2、ns false. The iterator returned points to the first element of the second group. The relative ordering within each group is not necessarily the same as before the call. See function stable_partition for a function with a similar behavior and stability in the the ordering. The behavior of this functi
3、on template is equivalent to:template BidirectionalIterator partition ( BidirectionalIterator first,BidirectionalIterator last, Predicate pred )while (first!=last)-last;while (first!=last & pred(*first) +first;while (first!=last & !pred(*last) -last;if (first!=last) swap (*first+,*last);return first
4、;Parametersfirst, last Bidirectional iterators to the initial and final positions of the sequence to be partitioned. The range used is first,last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last. pred Unary predicate
5、 taking an element in the range as argument, and returning a value indicating the falsehood (with false, or a zero value) or truth (true, or non-zero) of some condition applied to it. This can either be a pointer to a function or an object whose class overloads operator(). Return valuenone Example/
6、partition algorithm example#include #include #include using namespace std;bool IsOdd (int i) return (i%2)=1; int main () vector myvector;vector:iterator it, bound;/ set some values:for (int i=1; i10; +i) myvector.push_back(i); / 1 2 3 4 5 6 7 8 9bound = partition (myvector.begin(), myvector.end(), I
7、sOdd);/ print out content:cout odd members:;for (it=myvector.begin(); it!=bound; +it)cout *it;cout neven members:;for (it=bound; it!=myvector.end(); +it)cout *it;cout endl; return 0;A possible output:odd members: 1 9 3 7 5even members: 6 4 8 2ComplexityAs many applications of pred as the length of the range first,last) plus up to half as many swap operations (worst-case). See alsoreverse Reverse range (function template)rotate Rotate elements in range (function template)find_if Find element in range (function template)swap Exchange values of two objects (function template)