/*
* 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;
}
}
template<class For, class Pred, 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;
}
}
template<class In, class Out, class T>
Out replace_copy(In first, In last, Out res, const T& val, const T& new_val)
{
while (first != last) {
*res++ = (*first == val) ? new_val : *first;
++first;
}
return res;
}
template<class In, class Out, class Pred, class T>
Out replace_copy_if(In first, In last, Out res, Pred p, const T& new_val)
{
while (first != last) {
*res++ = p(*first) ? new_val : *first;
++first;
}
return res;
}
/*
* Usage
*
*/
void f(list<string>& towns)
{
replace(towns.begin(),towns.end(),"Aarhus","\*(Aarhus");
}