Narzędzia użytkownika

Narzędzia witryny


replace_replace_if

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

 #include<algorithm> 

Definicja replace

 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;
	}
}

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

 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;
	}
}

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ę.

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");

Przykład użycia replace

replace(miasta.begin(),	miasta.end(),std::string("Warszawa"),std::string("Gdansk"));

Przykład użycia replace_if

Zdefiniujmy predykat:

bool is_gdansk(const std::string& miasto)
{
	return (miasto == "Gdansk");
}

Wywolanie replace_if

replace_if(miasta.begin(),miasta.end(),is_gdansk,std::string("Wroclaw"));
replace_replace_if.txt · ostatnio zmienione: 2008/12/11 16:19 przez kswietko