Взгляните на std::for_each
и std::transform
. Последний принимает три итератора (начало и конец последовательности и начало выходной последовательности) и объект функции. Есть несколько способов написать это. Один из способов, используя только стандартные вещи:
transform(myvec.begin(), myvec.end(), myvec.begin(),
bind2nd(std::plus<double>(), 1.0));
Вы также можете сделать это с for_each
, но поведение по умолчанию std::plus
не запишет ответ обратно в исходный вектор. В этом случае вы должны написать свой собственный функтор. Вот простой пример:
struct AddVal
{
double val;
AddVal(double v) : val(v);
void operator()(double &elem) const
{
elem += v;
}
};
std::for_each(myvec.begin(), myvec.end(), AddVal(1.0));