Różnice między wybraną wersją a wersją aktualną.
Next revision Both sides next revision | |||
remove_copy_remove_copy_if [2009/04/28 22:04] qba utworzono |
remove_copy_remove_copy_if [2009/04/28 22:13] qba |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
+ | ====== ALGORYTM REMOVE_COPY ====== | ||
+ | |||
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 ===== | ||
+ | <code cpp> | ||
+ | bool Predykat(std::string element); | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | 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"); | ||
+ | |||
+ | //----------------------- | ||
+ | //Algorytm remove_copy: | ||
+ | //----------------------- | ||
+ | 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); | ||
+ | |||
+ | |||
+ | //----------------------- | ||
+ | //Algorytm remove_copy_if: | ||
+ | //----------------------- | ||
+ | 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); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | 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> |