STL way to add a constant value to a std::vector
Even shorter using lambda functions, if you use C++0x:
std::for_each(myvec.begin(), myvec.end(), [](double& d) { d+=1.0;});
Take a look at std::for_each
and std::transform
. The latter accepts three iterators (the begin and end of a sequence, and the start of the output sequence) and a function object. There are a couple of ways to write this. One way, using nothing but standard stuff, is:
transform(myvec.begin(), myvec.end(), myvec.begin(),
bind2nd(std::plus<double>(), 1.0));
You can do it with for_each
as well, but the default behavior of std::plus
won't write the answer back to the original vector. In that case you have to write your own functor. Simple example follows:
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));
The shortest way in plain C++0X is :
for(double& d : myvec)
d += 1.0;
and with boost :
for_each(myvec, _1 += 1.0); // boost.range + boost.lambda