Алгоритм 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"; |
}