Narzędzia użytkownika

Narzędzia witryny


unique_unique_copy

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision Both sides next revision
unique_unique_copy [2009/04/30 00:23]
pgrabowska kosmetyka
unique_unique_copy [2009/04/30 00:48]
pgrabowska uzupelnienie
Linia 20: Linia 20:
 **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. **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 ​funkcjęktóra ​porównuje elementy. ​Powinna ona zwracać //true// jeśli elementy są identyczne i //false// w przeciwnym przypadku.+Porównywanie elementów odbywa się przy wykorzystaniu operatora ==. W przypadku, gdy nie jest zaimplementowany,​ należy podać jako trzeci argument ​predykatktóry ​porównuje elementy. ​Powinien on zwracać //true// jeśli elementy są identyczne i //false// w przeciwnym przypadku.
  
 Zachowanie algorytmu jest następujące:​ Zachowanie algorytmu jest następujące:​
Linia 41: Linia 41:
 ==== Parametry ==== ==== Parametry ====
  
-  * //​firstElement,​ lastElement//​ - iteratory wskazujące zakres elementów na którym będzie realizowany algorytm. Zakres ten zawiera wszystkie elementy od firstElement do elementu poprzedzającego lastElement. +  * //​firstElement,​ lastElement//​ - iteratory wskazujące zakres elementów na którym będzie realizowany algorytm. Zakres ten zawiera wszystkie elementy od //firstElement// do elementu poprzedzającego ​//lastElement//
-  * //comp// - binarny predykat przyjmujący 2 elemety jako argumenty i zwracający true jeśli oba są równe i false w przeciwnym przypadku. Może to być zarówno wskaźnik na funkcję, jak i wskaźnik na obiekt klasy przeciążającej operator().+  * //comp// - binarny predykat przyjmujący 2 elemety jako argumenty i zwracający ​//true// jeśli oba są równe i //false// w przeciwnym przypadku. Może to być zarówno wskaźnik na funkcję, jak i wskaźnik na obiekt klasy przeciążającej ​//operator()//.
  
 ==== Wartość zwracana ==== ==== Wartość zwracana ====
Linia 51: Linia 51:
  
 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 ). 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 ).
 +
 +===== unique_copy =====
 +
 +<code cpp>
 +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 );
 +</​code>​
 +
 +**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:​
 +<code cpp>
 +template <class ForwardIterator>​
 +  ForwardIterator unique ( ForwardIterator firstElement,​ ForwardIterator lastElement )
 +{
 +  ForwardIterator result = first;
 +
 +  while ( ++first != last )
 +  {
 +    if ( !( *result == *first ) ) 
 +        *(++result)=*first;​
 +  }
 +
 +  return ++result;
 +}
 +</​code>​
 +
 +==== Parametry ====
 +  * //​firstElement,​ lastElement//​ - iteratory wskazujące zakres elementów na którym będzie realizowany algorytm. Zakres ten zawiera wszystkie elementy od //​firstElement//​ do elementu poprzedzającego //​lastElement//​.
 +  * //result// - iterator wskazujący początek zakresu, do którego ma być zapisana sekwencja elementów wyznaczona przez algorytm.
 +  * //comp// - binarny predykat przyjmujący 2 elemety jako argumenty i zwracający //true// jeśli oba są równe i //false// w przeciwnym przypadku. Może to być zarówno wskaźnik na funkcję, jak i wskaźnik na obiekt klasy przeciążającej //​operator()//​.
 +
 +==== Wartość zwracana ====
 +Iterator wskazujący na koniec skopiowanego zakresu.
 +
 +
 +
 +
 +
 +
  
  
unique_unique_copy.txt · ostatnio zmienione: 2009/04/30 02:01 przez pgrabowska