Narzędzia użytkownika

Narzędzia witryny


replace_replace_if

Różnice

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

Odnośnik do tego porównania

replace_replace_if [2008/12/11 16:19] (aktualna)
kswietko utworzono
Linia 1: Linia 1:
 +====== Algorytmy replace replace_if ======
 +
 +Algorytmy replace, replace_if umożliwiają przeglądanie ciągu (kolekcji) i zamianę wartości na inne, zgodnie ze specyfikacją.
 +Algorytm replace używa operatora==() do porównywania elementów, replace_if przyjmuje predykat jako warunek zamiany.
 +Algorytmy te umożliwiają łatwy, jednoznaczny i zwięzły sposób realizacji bardzo częstej operacji jaką jest zamiana.
 +
 +===== Nagłówek =====
 +
 +<code cpp> #​include<​algorithm>​ </​code>​
 +
 +===== Definicja replace =====
 +<code cpp> template<​class For, class T>
 +void replace(For first, For last, const T& val, const T& new_val)
 +{
 + while (first != last)
 + {
 + if(*first == val) 
 + *first = new_val;
 + ++first;
 + }
 +}
 +</​code>​
 +
 +===== Parametry replace=====
 +  * first - pierwszy element ciągu
 +  * last - element za ostatnim w ciągu
 +  * val         - wartość wzorca, obiekty o tej wartości będą zamieniane
 +  * new_val ​    - wartość na którą będą zamieniane obiekty pasujące do wzorca (val)
 +
 +===== Definicja replace_if =====
 +<code cpp> template<​class For, class T>
 +void replace_if(For first, For last, Pred p, const T& new_val)
 +{
 + while (first != last)
 + {
 + if(p(*first)
 + *first = new_val;
 + ++first;
 + }
 +}
 +</​code>​
 +
 +
 +===== Parametry replace_if=====
 +  * first - pierwszy element ciągu
 +  * last - element za ostatnim w ciągu
 +  * pred         - predykat, jeżeli dla danego elementu ciągu zwróci TRUE, element ten zostanie zamieniony na new_val
 +  * new_val ​    - wartość na którą będą zamieniane elementy spełniające predykat
 +
 +===== Przykłady =====
 +Zdefiniujmy kolekcję.
 +<code cpp>
 +typedef std::​list<​std::​string>​ Miasta;
 +Miasta miasta;
 + miasta.push_back("​Warszawa"​);​
 + miasta.push_back("​Krakow"​);​
 + miasta.push_back("​Poznan"​);​
 + miasta.push_back("​Ostrow Mazowiecka"​);​
 + miasta.push_back("​Warszawa"​);​
 +
 +</​code>​
 +===== Przykład użycia replace =====
 +<code cpp>
 +replace(miasta.begin(),​ miasta.end(),​std::​string("​Warszawa"​),​std::​string("​Gdansk"​));​
 +</​code>​
 +===== Przykład użycia replace_if =====
 +Zdefiniujmy predykat:
 +<code cpp>
 +bool is_gdansk(const std::​string&​ miasto)
 +{
 + return (miasto == "​Gdansk"​);​
 +}
 +</​code>​
 +Wywolanie replace_if
 +<code cpp>
 +replace_if(miasta.begin(),​miasta.end(),​is_gdansk,​std::​string("​Wroclaw"​));​
 +</​code>​
 +
  
replace_replace_if.txt · ostatnio zmienione: 2008/12/11 16:19 przez kswietko