Różnice między wybraną wersją a wersją aktualną.
| Next revision | Previous revision | ||
|
remove_copy_remove_copy_if [2009/04/28 22:04] qba utworzono |
remove_copy_remove_copy_if [2009/04/28 22:17] (aktualna) qba |
||
|---|---|---|---|
| Linia 1: | Linia 1: | ||
| + | ====== ALGORYTM REMOVE_COPY / REMOVE_COPY_IF ====== | ||
| + | |||
| Algorytm remove_copy kopiuje elementy pewnej kolekcji do innej omijajac obiekty, które sa rowne zadanej wartosci. | Algorytm remove_copy kopiuje elementy pewnej kolekcji do innej omijajac obiekty, które sa rowne zadanej wartosci. | ||
| Algorytm remove_copy_if kopiuje elementy pewnej kolekcji do innej. Element jest kopiowany, jezeli nie zostal | Algorytm remove_copy_if kopiuje elementy pewnej kolekcji do innej. Element jest kopiowany, jezeli nie zostal | ||
| Linia 5: | Linia 7: | ||
| czas. | czas. | ||
| - | Nagłowek: | + | ===== Nagłowek: ===== |
| - | #include<algorithm> | + | <code cpp> |
| + | #include <algorithm> | ||
| + | </code> | ||
| - | Deklaracje: | + | ===== Deklaracje: ===== |
| + | <code cpp> | ||
| template<class ForwardIterator, class OutputIterator, class Type> | template<class ForwardIterator, class OutputIterator, class Type> | ||
| inline OutputIterator remove_copy( | inline OutputIterator remove_copy( | ||
| Linia 16: | Linia 21: | ||
| const T& Value | const T& Value | ||
| ) | ) | ||
| - | + | </code> | |
| - | template<class ForwardIterator, class OutputIterator, class Predicate> | + | <code cpp> |
| + | template<class ForwardIterator, class OutputIterator, class Predicate> | ||
| inline OutputIterator remove_copy_if( | inline OutputIterator remove_copy_if( | ||
| ForwardIterator First, | ForwardIterator First, | ||
| Linia 24: | Linia 30: | ||
| Predicate Pred | Predicate Pred | ||
| ) | ) | ||
| - | + | </code> | |
| - | Parametry: | + | |
| - | remove_copy: | + | ===== Parametry: ===== |
| + | == remove_copy: == | ||
| First - Poczatkowy element kolekcji zrodlowej. | First - Poczatkowy element kolekcji zrodlowej. | ||
| Last - Koncowy element kolekcji zrodlowej. | Last - Koncowy element kolekcji zrodlowej. | ||
| Linia 32: | Linia 39: | ||
| Value - Wartosc, ktora ma byc pomijana podczas kopiowania. | Value - Wartosc, ktora ma byc pomijana podczas kopiowania. | ||
| - | remove_copy_if: | + | == remove_copy_if: == |
| Firstt - Poczatkowy element kolekcji zrodlowej. | Firstt - Poczatkowy element kolekcji zrodlowej. | ||
| Last - Koncowy element kolekcji zrodlowej. | Last - Koncowy element kolekcji zrodlowej. | ||
| Linia 38: | Linia 45: | ||
| Pred - Warunek okreslajacy czy wartosc ma zostac skopiowana. | Pred - Warunek okreslajacy czy wartosc ma zostac skopiowana. | ||
| - | Wartosc zwracana: | + | ===== Wartosc zwracana: ===== |
| Obie funkcje zwracaja iterator na koniec nowej kolekcji. | Obie funkcje zwracaja iterator na koniec nowej kolekcji. | ||
| - | Złożonosc: | + | ===== Złożonosc: ===== |
| Obie funkcje pracuja w czasie liniowym. | Obie funkcje pracuja w czasie liniowym. | ||
| + | |||
| + | ===== Przyklad Uzycia ===== | ||
| + | == Stworzenie kolekcji: == | ||
| + | <code cpp> | ||
| + | std::list<std::string> kolekcja_zrodlowa; //Tworzymy przykladowa kolekcje obiektow | ||
| + | kolekcja_zrodlowa.push_back("Adam"); //i wypelniamy ja przykladowymi wartosciami | ||
| + | kolekcja_zrodlowa.push_back("Ewa"); | ||
| + | kolekcja_zrodlowa.push_back("Usun"); | ||
| + | kolekcja_zrodlowa.push_back("Ela"); | ||
| + | kolekcja_zrodlowa.push_back("Usun"); | ||
| + | kolekcja_zrodlowa.push_back("Jola"); | ||
| + | kolekcja_zrodlowa.push_back("Ola"); | ||
| + | </code> | ||
| + | == remove_copy: == | ||
| + | <code cpp> | ||
| + | std::list<std::string> kolekcja_docelowa1; //Tworzymy kolekcje, do ktorej kopiowala bedzie funkcja remove_copy | ||
| + | std::string warunek="Usun"; //Tworzymy zmienna przechowujaca napis, ktory ma nie byc kopiowany | ||
| + | |||
| + | kolekcja_docelowa1.resize(10); | ||
| + | |||
| + | std::list<std::string>::iterator doc1_iterator; //Funkcja ma skopiowac kolekcja_zrodlowa do kolekcja_docelowa1 pomijajac wartosc "Usun" | ||
| + | doc1_iterator = remove_copy(kolekcja_zrodlowa.begin(), kolekcja_zrodlowa.end(), kolekcja_docelowa1.begin(), warunek); | ||
| + | </code> | ||
| + | ==remove_copy_if: == | ||
| + | <code cpp> | ||
| + | std::list<std::string> kolekcja_docelowa2; //Tworzymy kolekcje, do ktorej kopiowala bedzie funkcja remove_copy_if | ||
| + | |||
| + | kolekcja_docelowa2.resize(10); | ||
| + | |||
| + | std::list<std::string>::iterator doc2_iterator; //Funkcja ma skopiowac kolekcja_zrodlowa do kolekcja_docelowa1 pomijajac wartosci | ||
| + | //dla ktorych Predykat() == true | ||
| + | doc2_iterator = remove_copy_if(kolekcja_zrodlowa.begin(), kolekcja_zrodlowa.end(), kolekcja_docelowa2.begin(), Predykat); | ||
| + | </code> | ||
| + | == Funkcja predykat: == | ||
| + | <code cpp> | ||
| + | bool Predykat(std::string element){ //Funkcja warunek, ktora zostaje wywolywana przez funkcje remove_copy_if aby sprawdzic, | ||
| + | //czy dany element nalezy usunac. | ||
| + | if(element=="Usun" || element[0] == 'E') | ||
| + | return true; //Jezeli element=="Usun" lub pierwszy znak elementu to "E", wtedy nie kopiujemy. | ||
| + | return false; | ||
| + | } | ||
| + | </code> | ||