Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
partition [2009/04/28 23:37] pszostek |
partition [2009/04/29 00:10] pszostek |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
====== Algorytm partition ====== | ====== Algorytm partition ====== | ||
- | Dla podanego zakresu iteratorów algorytm partition ustawia wszystkie elementy, które spełniają podany predykat, przed elementami, ktore go nie spełniają. Algorytm nie musi zachowywać względnej kolejności elementów w kontenerze. | + | Dla podanego zakresu iteratorów algorytm partition ustawia wszystkie elementy, które spełniają podany predykat, przed elementami, ktore go nie spełniają. Algorytm nie musi zachowywać względnej kolejności elementów w kontenerze. Aby uzyskać funkcjonalność //std::partition// przy zachowaniu względnej kolejności elementów, należy sięgnąć do //std::stable_partition//. |
===== Deklaracja ===== | ===== Deklaracja ===== | ||
w pliku nagłówkowym algorithm: | w pliku nagłówkowym algorithm: | ||
<code cpp> | <code cpp> | ||
- | template <class BidirectionalIterator, class Predicate> | + | template <class ForwardIterator, class Predicate> |
- | BidirectionalIterator partition ( BidirectionalIterator first, | + | ForwardIterator partition ( ForwardIterator first, |
- | BidirectionalIterator last, Predicate pred ); | + | ForwardIterator last, Predicate pred ); |
</code> | </code> | ||
===== Parametry ===== | ===== Parametry ===== | ||
- | * **first, last** - iteratory wskazujące na zakres podziału elementów. Iterator last wskazuje jeden za element za ostatnim, ktory ma ulec przetwarzaniu. | + | * **first, last** - iteratory wskazujące na zakres elementów, które mają ulec podziałowi. Iterator last wskazuje jeden element za ostatnim, ktory ma ulec przetwarzaniu. |
- | * **pred** - funkcja lub obiekt funkcyjny (z przeciążonym operatorem()), będący predykatem dla podziału elementów. Elementy kontenera, które spełniają predykat, zostaną ustawione na początku kontenera, na który wskazują iteratory first i last. Elementy kontenera niespełniające predykatu zostaną ustawione w kontenerze w drugiej kolejności. | + | |
+ | * **pred** - funkcja lub obiekt funkcyjny (z przeciążonym operatorem()), będący predykatem dla podziału elementów. Elementy kontenera, które spełniają predykat, zostaną ustawione na początku kontenera, na który wskazują iteratory first i last. Elementy kontenera niespełniające predykatu zostaną ustawione w kontenerze w drugiej kolejności. | ||
===== Zwracana wartość ===== | ===== Zwracana wartość ===== | ||
- | Iterator na kolejny element za ostatnim, który spełniał podany predykat | + | Iterator na kolejny element za ostatnim, który spełniał podany predykat. |
+ | |||
+ | ===== Wymagania na parametryzowane typy ===== | ||
+ | * //ForwardIterator// posiada funkcjonalność iteratora jednokierunkowego | ||
+ | |||
+ | * //Predicate// udostępnia jednoargumentowy operator() | ||
+ | |||
+ | * Typ wartości dla klasy //BidirectionalIterator// jest konwertowalny do typu argumentu operatora() dla klasy //Predicate// | ||
===== Złożoność ===== | ===== Złożoność ===== | ||
Algorytm partition() dokonuje najwyżej (first-last)/2 zamian elementów i aplikuje podany predykat dokladnie first-last razy. | Algorytm partition() dokonuje najwyżej (first-last)/2 zamian elementów i aplikuje podany predykat dokladnie first-last razy. |