To jest stara wersja strony!
Algorytmy te znajdują się w bibliotece algorithm.
#include <algorithm>
template <class ForwardIterator> ForwardIterator unique ( ForwardIterator firstElement, ForwardIterator lastElement ); template <class ForwardIterator, class BinaryPredicate> ForwardIterator unique ( ForwardIterator firstElement, ForwardIterator lastElement, BinaryPredicate comp );
unique to algorytm służący usuwaniu następujących po sobie duplikatów elementów z zakresu [ firstElement , lastElement ). firstElement i lastElement są iteratorami wskazującymi na pozycję w kontenerze ( np. lista, wektor ). Algorytm jest realizowany poprzez usuwanie wszystkich elementów identycznych z elementem bezpośrednio poprzedzającym.
Porównywanie elementów odbywa się przy wykorzystaniu operatora ==. W przypadku, gdy nie jest zaimplementowany, należy podać jako trzeci argument predykat, który porównuje elementy. Powinien on zwracać true jeśli elementy są identyczne i false w przeciwnym przypadku.
Zachowanie algorytmu jest następujące:
template <class ForwardIterator> ForwardIterator unique ( ForwardIterator firstElement, ForwardIterator lastElement ) { ForwardIterator result = first; while ( ++first != last ) { if ( !( *result == *first ) ) *(++result)=*first; } return ++result; }
Iterator wskazujący na nowy koniec sekwencji z zadanego zakresu, która nie zawiera już powtarzających się po sobie elementów.
Należy uwzględnić fakt, że algorytm unique nie zmienia wielkości kontenera, ani nie zmienia elementów położonych za nowym końcem ( ciągle są dostępne ).
template <class InputIterator, class OutputIterator> OutputIterator unique_copy ( InputIterator firstElement, InputIterator lastElement, OutputIterator result ); template <class InputIterator, class OutputIterator, class BinaryPredicate> OutputIterator unique_copy ( InputIterator firstElement, InputIterator firstElement, OutputIterator result, BinaryPredicate comp );
unique_copy kopiuje wartości elementów z zakresu [ firstElement, lastElement ) do zakresu, którego początek wskazuje iterator result, za wyjątkiem następujących po sobie duplikatów.
Algorytm pomija elementy o wartościach identycznych z elementem bezpośrednio je poprzedzającym ( kopiowany jest zawsze tylko pierwszy element ze zbioru elementów identycznych ).
Porównywanie elementów odbywa się przy wykorzystaniu operatora ==. W przypadku, gdy nie jest zaimplementowany, należy podać jako trzeci argument predykat, który porównuje elementy. Powinien on zwracać true jeśli elementy są identyczne i false w przeciwnym przypadku.
Zachowanie algorytmu jest następujące:
template <class ForwardIterator> ForwardIterator unique ( ForwardIterator firstElement, ForwardIterator lastElement ) { ForwardIterator result = first; while ( ++first != last ) { if ( !( *result == *first ) ) *(++result)=*first; } return ++result; }
Iterator wskazujący na koniec skopiowanego zakresu.