stable_partition( &ia[0], &ia[12], even_elem() );
cout "устойчивое разбиение по четным элементам:\n";
copy( ia, ia+11, ofile ); cout '\n';
stable_partition( vec.begin(), vec.end(),
bind2nd(lessint(),25) );
cout "устойчивое разбиение по элементам, меньшим 25:\n";
copy( vec.begin(), vec.end(), ofile ); cout '\n';
}
Алгоритм stable_sort()
templateclass RandomAccessIterator
void
stable_sort( RandomAccessIterator first,
RandomAccessIterator last );
template class RandomAccessIterator, class Compare
void
stable_sort( RandomAccessIterator first,
RandomAccessIterator last, Compare comp );
stable_sort() ведет себя так же, как sort(), но гарантированно сохраняет относительный порядок равных элементов контейнера. Второй вариант упорядочивает элементы на основе заданной программистом операции сравнения comp.
#include algorithm
#include vector
#include iostream.h
/* печатается:
исходная последовательность:
29 23 20 22 12 17 15 26 51 19 12 23 35 40
устойчивая сортировка - по умолчанию в порядке возрастания:
12 12 15 17 19 20 22 23 23 26 29 35 40 51
устойчивая сортировка: в порядке убывания:
51 40 35 29 26 23 23 22 20 19 17 15 12 12
*/
int main()
{
int ia[] = { 29,23,20,22,12,17,15,26,51,19,12,23,35,40 };
vector int, allocator vec( ia, ia+14 );
ostream_iterator int ofile( cout, " " );
cout "исходная последовательность:\n";
copy( vec.begin(), vec.end(), ofile ); cout '\n';
stable_sort( &ia[0], &ia[14] );
cout "устойчивая сортировка - по умолчанию "
"в порядке возрастания:\n";
copy( ia, ia+14, ofile ); cout '\n';
stable_sort( vec.begin(), vec.end(), greaterint() );
cout "устойчивая сортировка: в порядке убывания:\n";
copy( vec.begin(), vec.end(), ofile ); cout '\n';
}
Алгоритм swap()
template class Type
void
swap ( Type &ob1, Type &ob2 );
swap() обменивает значения объектов ob1 и ob2.
#include algorithm
#include vector
#include iostream.h
/* печатается:
исходная последовательность:
3 4 5 0 1 2
после применения swap() в процедуре пузырьковой сортировки:
0 1 2 3 4 5
*/
int main()
{
int ia[] = { 3, 4, 5, 0, 1, 2 };
vectorint, allocator vec( ia, ia+6 );
for ( int ix = 0; ix 6; ++ix )
for ( int iy = ix; iy 6; ++iy ) {
if ( vec[iy] vec[ ix ] )
swap( vec[iy], vec[ix] );
}
ostream_iterator int ofile( cout, " ");
cout "исходная последовательность:\n";
copy( ia, ia+6, ofile ); cout '\n';
cout "после применения swap() в процедуре "
"пузырьковой сортировки:\n";
copy( vec.begin(), vec.end(), ofile ); cout '\n';
}
Алгоритм swap_ranges()
template class ForwardIterator1, class ForwardIterator2
ForwardIterator2
swap_ranges( ForwardIterator1 first1, ForwardIterator1 last,
ForwardIterator2 first2 );