partial_sort
void partial_sort ( RandIter start , RandIter mid ,
RandIter end ) ;
void partial_sort ( RandIter start , RandIter mid ,
RandIter end , Comp cmpfn ) ;
Алгоритъма partial_sort ( ) сортира редицата start – end . Обаче след изпълнението само елементите в поредицата start – mid ще бъдат сортирани в ред . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е по – малък от друг .
partial_sort_copy
RandIter partial_sort_copy ( InIter start , InIter end ,
RandIter res_start , RandIter res_end ) ;
RandIter partial_sort_copy ( InIter start , InIter end ,
RandIter res_start , RandIter res_end ,
Comp cmpfn ) ;
Алгоритъма partial_sort_copy ( ) сортира интервала start – end и след това копира елементите които ще бъдат сложени в резултатната редица определена от res_start до res_end . Връща се итератор за последния елемент копиран в резултатната поредица . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е по – малък от друг .
partition
BiIter partition ( BiIter start , BiIter end , UnPred pfn ) ;
Алгоритъма partition ( ) подрежда редицата определена от start до end така че всички елементи за които предиката pfn връща true идват преди онези за които предиката връща false . Тя връща итератор за началото на елементите за които предиката е false .
pop_heap
void pop_heap ( RandIter start , RandIter end ) ;
void pop_heap ( RandIter start , RandIter end , Comp cmpfn ) ;
Алгоритъма pop_heap ( ) разменя first и last – 1 елементити и тогава преизгражда хийпа . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е по – малък от друг .
prev_permutation
bool prev_permutation ( BiIter start , BiIter end ) ;
bool prev_permutation ( BiIter start , BiIter end ,
Comp cmpfn ) ;
Алгоритъма prev_permutation ( ) конструира предишната пермутация на редицата . Пермутациите се генерират приемайки сортирана редица от ниско към високо представяне за първа пермутация . Ако не съществува предишна пермутация , prev_permutation ( ) сортира редицата като нейна последна пермутация и връща false . В противен случай връща true . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е по – малък от друг .
push_heap
void push_heap ( RandIter start , RandIter end ) ;
void push_heap ( RandIter start , RandIter end ,
Comp cmpfn ) ;
Алгоритъма push_heap ( ) слага елемент в края на хийпа . Интервала определен от start до end е приет да представлява валиден хийп . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е по – малък от друг .
random_shuffle
void random_shuffle ( RandIter start , RandIter end ) ;
void random_shuffle ( RandIter start , RandIter end ,
Generator rand_gen ) ;
Алгоритъма random_shuffle ( ) разбърква редицата определена от start – end . Втората форма ви позволява да определя потребителски генератор на случайни числа . Тази функция трябва да има следната обща форма :
rand_gen ( num ) ;
Тя трябва да връща случайно число между 0 и num .
remove , remove_if , remove_copy и remove_copy_If
ForIter remove ( ForIter start , ForIter end , const T &val ) ;
ForIter remove_if ( ForIter start , ForIter end , UnPred pfn ) ;
OutIter remove_copy ( InIter start , InIter end , OutIter result ,
const T &val ) ;
OutIter remove_copy_if ( InIter start , InIter end ,
OutIter result , const T &val ,
UnPred pfn ) ;
Алгоритъма remove ( ) премахва елементи от определения интервал които са равни на val . Връща итератор за края на останалите елементи .
Алгоритъма remove_if ( ) премахва елементите от определения интервал за които предиката pfn e true . Връща итератор за края на останалите елементи .
Алгоритъма remove_copy ( ) копира елементите от определения интервал които са равни на val и слага резултата в поредицата определена от result . Връща итератор за края на result .
Алгоритъма remove_copy_if ( ) копира елементите от определения интервал за които предиката pfn e true и слага резултата в поредицата определена от result . Връща итератор за края на result .
replace , replace_copy , replace_if и replace_copy_If
void replace ( ForIter start , ForIter end , const T &old ,
Const T &new ) ;
void replace_if ( ForIter start , ForIter end , UnPred pfn ,
Const T &new ) ;
OutIter replace_copy ( InIter start , InIter end ,
OutIter result ,
const T &old , Const T &new ) ;
OutIter replace_copy_if ( InIter start , InIter end ,
OutIter result ,
UnPred pfn , Const T &new ) ;
В определения интервал алгоритъма replace ( ) разменя елементите които имат стойност old със елементите които имат стойност new .
В определения интервал алгоритъма replace_if ( ) разменя елементите за които предиката pfn e true със елементите които имат стойност new .
В определения интервал алгоритъма replace_copy ( ) копира елементи в result . В този процес разменя елементите със стойност old със елементи със стойност new . Първоначалния интервал е непроменен . Връща итератор за края на result .
В определения интервал алгоритъма replace_copy_if ( ) копира елементи в result В този процес разменя елементите за които предиката pfn връща true със елементи със стойност new . Първоначалния интервал е непроменен . Връща итератор за края на result .
reverse и reverse_copy
void reverse ( BiIter start , BiIter end ) ;
OutIter reverse_copy ( BiIter first , BiIter last ,
OutIter result ) ;
Алгоритъма reverse ( ) обръща реда на интервала определен от start и end .
Алгоритъма reverse_copy ( ) копира в обърнат ред интервала определен от start и end и съхранява ресултата в result . Връща итератор за края на result .
rotate и rotate_copy
void rotate ( ForIter start , ForIter mid , ForIter end ) ;
OutIter rotate_copy ( ForIter start , ForIter mid , ForIter end
OutIter result ) ;
Алгоритъма rotate ( ) ротира наляво елементите в интервала от start до end така че елемента определен от mid става новия първи елемент .
Алгоритъма rotate_copy ( ) копира интервала от start до end съхранявайки резултата във result . По време на процеса ротира наляво елементите така че елемента определен от mid става новия първи елемент . Връща итератор за края на result .
search
ForIter1 search ( ForIter1 start1 , ForIter1 end1 ,
ForIter2 start2 , ForIter2 end2 ) ;
ForIter1 search ( ForIter1 start1 , ForIter1 end1 ,
ForIter2 start2 , ForIter2 end2 ,BinPred pfn );
Алгоритъма search ( ) търси за поредица във редица . Редицата която се претърсва е определена от start1 и end1 . Поредицата която се търси е определена от start2 и end2 . Ако поредицата е открита се връща итератор за нейното начало . В противен случай се връща end1 . Втората форма ви позволява да определите бинарен предикат който определя кога един елемент е равен на друг .
search_n
ForIter search_n ( ForIter start , ForIter end , Size num ,
Const T &val ) ;
ForIter search_n ( ForIter start , ForIter end , Size num ,
Const T &val , BinPred pfn ) ;
Алгоритъма search_n ( ) търси за редица от подобни на num елементи в редица . Редицата която се претърсва е определена от start и end . Ако поредицата е открита се връща итератор за нейното начало . В противен случай се връща end . Втората форма ви позволява да определите бинарен предикат който определя кога един елемент е равен на друг .
set_difference
OutIter set_difference ( InIter1 start1 , InIter1 end1 ,
InIter2 start2 , InIter2 end2 ,
OutIter result ) ;
OutIter set_difference ( InIter1 start1 , InIter1 end1 ,
InIter2 start2 , InIter2 end2 ,
OutIter result , Comp cmpfn ) ;
Алгоритъма set_difference ( ) произвежда редица която съдържа разликата между две подредени множества определени от start1 , end1 и start2 , end2 . Така множеството определено от start2 , end2 се изважда от множеството start1 , end1 . Резултата е подреден и сложен във result . Връща итератор за края на result . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е по – малък от друг .
set_intersection
OutIter set_intersection ( InIter1 start1 , InIter1 end1 ,
InIter2 start2 , InIter2 end2 ,
OutIter result ) ;
OutIter set_intersection ( InIter1 start1 , InIter1 end1 ,
InIter2 start2 , InIter2 end2 ,
OutIter result , Comp cmpfn ) ;
Алгоритъма set_intersection ( ) произвежда редица която съдържа сечението на две подредени множества определени от start1 , end1 и start2 , end2 . Това са елементите открити и във двете множества . Резултата е подреден и сложен във result . Връща итератор за края на result . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е
по – малък от друг .
set_symetric_difference
OutIter set_symetric_difference ( InIter1 start1 , InIter1 end1 ,
InIter2 start2 , InIter2 end2 ,
OutIter result ) ;
OutIter set_symetric_difference ( InIter1 start1 , InIter1 end1 ,
InIter2 start2 , InIter2 end2 ,
OutIter result , Comp cmpfn ) ;
Алгоритъма set_symetric_difference ( ) произвежда редица която съдържа симетричната разлика между две подредени множества определени от start1 , end1 и start2 , end2 . Това е резултатно множество съдържа само онези елементи които не са общи за двете множества . Резултата е подреден и сложен във result . Връща итератор за края на result . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е по – малък от друг .
set_union
OutIter set_union ( InIter1 start1 , InIter1 end1 ,
InIter2 start2 , InIter2 end2 ,OutIter result );
OutIter set_union ( InIter1 start1 , InIter1 end1 ,
InIter2 start2 , InIter2 end2 , OutIter result
Comp cmpfn ) ;
Алгоритъма set_union ( ) произвежда редица която съдържа обединението на две подредени множества определени от start1 , end1 и start2 , end2 . Така резултатното множество съдържа тези елементи които са и във двете множества . Резултата е подреден и сложен във result . Връща итератор за края на result . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е по – малък от друг .
sort
void sort ( RandIter start , RandIter end ) ;
void sort ( RandIter start , RandIter end , Comp cmpfn ) ;
Алгоритъма sort ( ) сортира интервала определен от start и end . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е по – малък от друг .
sort_heap
void sort_heap ( RandIter start , RandIter end ) ;
void sort_heap ( RandIter start , RandIter end , Comp cmpfn ) ;
Алгоритъма sort_heap ( ) сортира хийп определен от start и end . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е по – малък от друг .
stable_partition
BiIter stable_partition ( BiIter start , BiIter end ,
BinPred pfn ) ;
Алгоритъма stable_partition ( ) подрежда редицата определена от start и end така че всички елементи за които предиката определен от pfn връща true идват преди тези за които предиката връща false . Разделянето е постоянно . Това означава че съответното подреждане се запазва . Връща итератор към началото на елементите за които предиката е false .
stable_sort
void stable_sort ( RandIter start , RandIter end ) ;
void stable_sort ( RandIter start , RandIter end , Comp cmpfn );
Алгоритъма stable_sort ( ) подрежда интервала start – end . Сортирането е постоянно . Това означава че еднаквите елементи не се пренареждат . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е по – малък от друг .
swap
void swap ( T &i , T &j ) ;
Алгоритъма swap ( ) разменя стойностите отнасящи се за i и j .
swap_ranges
ForIter2 swap_ranges ( ForIter1 start1 , ForIter1 end1 ,
ForIter2 start2 ) ;
Алгоритъма swap_ranges ( ) разменя елементите в интервала определен от start1 и end1 със елементите в редицата започваща със start2 . Връща указател към края на редицата определена от start2 .
transform
OutIter transform ( InIter start , InIter end , OutIter result ,
Func unaryfunc ) ;
OutIter transform ( InIter1 start1 , InIter1 end1 , InIter2
start2 , OutIter result , Func binaryfunc ) ;
Алгоритъма transform ( ) прибавя функция към интервала от елементи и съхранява резултата във result . В първата форма интервала е определен от start и end . Функцията която ще бъде добавена е определена от unaryfunc . Тази функция получава стойност на елемент като нейн параметър и трябва да връща неговата трансформация . Във втората форма , трансформацията е добавена чрез използване на бинарна операторна функция която получава елемент от редицата и го преобразува във нейн първи параметър и елемент от втората редица за найн втори параметър . И двете версии връщат итератор за края на резултатната редица .
Програмен съвет
Един от най – интересните алгоритми е transform ( ) понеже той изменя всеки елемент в интервала съгласно предоставената функция . Например , следващата програма използва проста преобразуваща функция наречена xform ( ) да вдигне на квадрат съдържанието на списък . Забележете че резултатната редица се съхранява в същия списък който доставя първоначалната редица :
// пример за трансформиращ алгоритъм
# include < iostream >
#include < list >
#include < algorithm >
using namespace std ;
// проста преобразуваща функция
int xform ( int i ) {
return i * i ; // първоначалната стойност на квадрат
}
int main ( )
{
list < int > xl ;
int i ;
// слага стойности във списъка
for ( i = 0 ; i < 10 ; i ++ ) xl . push_back ( i ) ;
cout << “ Original contents of xl : “ ;
list < int > : : iterator p = xl . begin ( ) ;
while ( p != xl . end ( ) ) {
cout << *p << “ “ ;
p++ ;
}
cout << endl ;
// трансформира xl
p = transform ( xl . begin ( ) , xl . end ( ) , xl . begin ( ) ,
xform ) ;
cout << “ Transformed contents of xl : “ ;
p = xl . begin ( ) ;
while ( p != xl . end ( ) ) {
cout << *p << “ “ ;
p++ ;
}
return 0 ;
}
Изхода от тази програма е :
Original contents of xl : 0 1 2 3 4 5 6 7 8 9
Transformed contents of xl : 0 1 4 9 16 25 36 49 64 81
Както можете да видите всеки елемент в xl е бил повдигнат на квадрат .
unique и unique_copy
ForIter unique ( ForIter start , ForIter end ) ;
ForIter unique ( ForIter start , ForIter end , BinPred pfn ) ;
OutIter unique_copy ( ForIter start , ForIter end ,
OutIter result ) ;
OutIter unique_copy ( ForIter start , ForIter end ,
OutIter result , BinPred pfn ) ;
Алгоритъма unique ( ) елиминира дублиращите се елементи от определения интервал . Втората форма ви позволява да определите бинарен предикат който определя кога един елемент е равен на друг . unique ( ) връща итератор за края на интервала . Алгоритъма unique_copy ( ) копира интервала определен от start и end , елиминирайки дублиращите се елементи по време на процеса . Резултата е сложен във result . Втората форма ви позволява да определите бинарен предикат който определя кога един елемент е равен на друг . unique_copy ( ) връща итератор за края на интервала .
upper_bound
ForIter upper_bound ( ForIter start , ForIter end ,
const T &val ) ;
ForIter upper_bound ( ForIter start , ForIter end ,
const T &val , Comp cmpfn ) ;
Алгоритъма upper_bound ( ) открива последната точка в редицата определена от start и end която не е по – голяма от val . Връща итератор за тази точка . Втората форма ви позволява да определите сравнителна функция която определя кога един елемент е по – малък от друг .
Сподели с приятели: |