VMS Help
CXXLSTD, Algorithms, partition

 *Conan The Librarian

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   partition  - Places all of the entities that satisfy the given
   predicate before all of	the entities that do not.

 SYNOPSIS

   #include <algorithm>

   template <class BidirectionalIterator, class Predicate>
   BidirectionalIterator
   partition (BidirectionalIterator first,
 	    BidirectionalIterator last,
 	    Predicate pred);

 DESCRIPTION

   The partition	algorithm places all the elements in the range [first,
   last) that satisfy pred before all the elements that do not
   satisfy	pred.  It returns an iterator that is one past the end
   of the group of elements	that satisfy pred.	 In other
   words, partition returns i such that for any itera- tor j	in the
   range[first, i),	pred(*j) == true, and, for any iterator	k in
   the range [i,	last), pred(*j)	== false.

   Note that partition does not necessarily maintain the	relative order
   of the elements that	match and elements that	do not match the
   predicate.  Use the algorithm stable_partition if	relative order
   is important.

 COMPLEXITY

   The partition	algorithm does at most (last - first)/2	swaps, and
   applies the predicate	exactly	last - first times.

 EXAMPLE

   //
   // prtition.cpp
   //
    #include <functional>
    #include <deque>
    #include <algorithm>
    #include <iostream.h>

    //
    // Create a new predicate from unary_function.
    //
   template<class Arg>
   class	is_even	: public unary_function<Arg, bool>
    {
     public:
     bool operator()(const Arg& arg1) { return (arg1 % 2) == 0; }
    };

   int main ()
    {
      //
      //	Initialize a deque with	an array of integers.
      //
     int	init[10] = { 1,2,3,4,5,6,7,8,9,10 };
     deque<int> d1(init+0, init+10);
     deque<int> d2(init+0, init+10);
      //
      //	Print out the original values.
      //
     cout << "Unpartitioned values: " <<	"";
     copy(d1.begin(), d1.end(),
 	 ostream_iterator<int,char>(cout," "));
     cout << endl;
      //
      //	A partition of the deque according to even/oddness.
      //
      partition(d2.begin(), d2.end(), is_even<int>());
      //
      //	Output result of partition.
      //
     cout << "Partitioned values: " << "";
     copy(d2.begin(), d2.end(),
 	 ostream_iterator<int,char>(cout," "));
     cout << endl;
      //
      //	A stable partition of the deque	according to even/oddness.
      //
     stable_partition(d1.begin(), d1.end(), is_even<int>());
      //
      //	Output result of partition.
      //
     cout << "Stable partitioned	values:	" << "";
     copy(d1.begin(), d1.end(),
 	 ostream_iterator<int,char>(cout," "));
     cout << endl;

     return 0;
    }

   Output :
   Unpartitioned	values:		  1 2 3	4 5 6 7	8 9 10
   Partitioned values:		  10 2 8 4 6 5 7 3 9 1
   Stable partitioned values:	  2 4 6	8 10 1 3 5 7 9

 WARNING

   If your compiler does	not support default template parameters, then
   you need to always supply	the Allocator template argument.  For
   instance,	you need to write	:

   deque<int, allocator<int> >

   instead of :

   deque<int>

 SEE ALSO

   stable_partition

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee
  Close     Help