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

       

Алгоритм prev_permutation()


template < class BidirectionalIterator >

bool

prev_permutation( BidirectionalIterator first,

                  BidirectionalIterator last );

template < class BidirectionalIterator, class Compare >

bool

prev_permutation( BidirectionalIterator first,

                  BidirectionalIterator last, class Compare );

prev_permutation() берет последовательность, ограниченную диапазоном [first,last), и, рассматривая ее как перестановку, возвращает предшествующую ей (о том, как упорядочиваются перестановки, говорилось в разделе 12.5). Если предыдущей перестановки не существует, алгоритм возвращает false, иначе true. В первом варианте для определения предыдущей перестановки используется оператор “меньше” для типа элементов контейнера, а во втором – бинарная операция сравнения, заданная программистом.

#include <algorithm>

#include <vector>

#include <iostream.h>

          

// печатается:    n d a   n a d   d n a   d a n   a n d   a d n

int main()

{

           vector< char, allocator > vec( 3 );

           ostream_iterator< char > out_stream( cout, " " );

                 

           vec[0] = 'n'; vec[1] = 'd'; vec[2] = 'a';

           copy( vec.begin(), vec.end(), out_stream ); cout << "\t";

           // сгенерировать все перестановки "dan"

           while( prev_permutation( vec.begin(), vec.end() )) {

                  copy( vec.begin(), vec.end(), out_stream );

                  cout << "\t";

           }

           cout << "\n\n";

}



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