====== 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_if kopiuje elementy pewnej kolekcji do innej. Element jest kopiowany, jezeli nie zostal
spelniony pewien warunek. W przeciwnym przypadku element zostaje pominięty.
Funkcje te stosowane sa do operacji na kontenerach, aby poprawic czytelnosc kodu oraz zaoszczedzic programiscie
czas.
===== Nagłowek: =====
#include
===== Deklaracje: =====
template
inline OutputIterator remove_copy(
ForwardIterator First,
ForwardIterator Last,
OutputIterator Result,
const T& Value
)
template
inline OutputIterator remove_copy_if(
ForwardIterator First,
ForwardIterator Last,
OutputIterator Result,
Predicate Pred
)
===== Parametry: =====
== remove_copy: ==
First - Poczatkowy element kolekcji zrodlowej.
Last - Koncowy element kolekcji zrodlowej.
Result - Iterator na kolekcje, do ktorej kopiowane sa dane.
Value - Wartosc, ktora ma byc pomijana podczas kopiowania.
== remove_copy_if: ==
Firstt - Poczatkowy element kolekcji zrodlowej.
Last - Koncowy element kolekcji zrodlowej.
Result - Iterator na kolekcje, do ktorej kopiowane sa dane.
Pred - Warunek okreslajacy czy wartosc ma zostac skopiowana.
===== Wartosc zwracana: =====
Obie funkcje zwracaja iterator na koniec nowej kolekcji.
===== Złożonosc: =====
Obie funkcje pracuja w czasie liniowym.
===== Przyklad Uzycia =====
== Stworzenie kolekcji: ==
std::list 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");
== remove_copy: ==
std::list 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::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);
==remove_copy_if: ==
std::list kolekcja_docelowa2; //Tworzymy kolekcje, do ktorej kopiowala bedzie funkcja remove_copy_if
kolekcja_docelowa2.resize(10);
std::list::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);
== Funkcja predykat: ==
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;
}