С++ для начинающих


Алгоритм stable_partition()


template< class BidirectionalIterator, class Predicate >

BidirectionalIterator

stable_partition( BidirectionalIterator first,

                  BidirectionalIterator last,

                  Predicate pred );

stable_partition() ведет себя так же, как partition(), но гарантированно сохраняет относительный порядок элементов контейнера. Вот та же программа, что и для алгоритма partition(), но с использованием stable_partition().

#include <algorithm>

#include <vector>

#include <iostream.h>

/* печатается:

   исходная последовательность:

   29 23 20 22 17 15 26 51 19 12 35 40

   устойчивое разбиение по четным элементам:



   20 22 26 12 40 29 23 17 15 51 19

   устойчивое разбиение по элементам, меньшим 25:

   23 20 22 17 15 19 12 29 26 51 35 40

*/

          

class even_elem {

public:

           bool operator()( int elem ) {

          return elem%2 ? false : true;

           }

};

          

int main()

{

           int ia[] = { 29,23,20,22,17,15,26,51,19,12,35,40 };

           vector< int, allocator > vec( ia, ia+12 );

     ostream_iterator< int >  ofile( cout, " " );

                 

     cout << "исходная последовательность:\n";

     copy( vec.begin(), vec.end(), ofile ); cout << '\n';

           stable_partition( &ia[0], &ia[12], even_elem() );

     cout << "устойчивое разбиение по четным элементам:\n";

     copy( ia, ia+11, ofile ); cout << '\n';

           stable_partition( vec.begin(), vec.end(),

                       bind2nd(less<int>(),25)  );

     cout << "устойчивое разбиение по элементам, меньшим 25:\n";

     copy( vec.begin(), vec.end(), ofile ); cout << '\n';

}



Содержание раздела