On Jul 5, 3:33 am, Ricky65 <ricky...@hotmail.com> wrote:
In C++0x the iota function has been added which I find very useful for
testing. However, I find the ability to only increment by 1 to be very
limiting. Sometimes we don't want to fill a container or array with
consecutive integers, we want to control the increment. Consequently,
I feel it would be useful to provide an overload for iota with this
functionality.
You could always overload increment.
template <typename Base, typename Step>
class stepper {
const Step stepsize;
Base value;
public:
stepper(Step stepsize, Base initial) : stepsize(stepsize),
value(initial) {}
stepper& operator ++() { value += stepsize; return *this; }
stepper operator ++(int) { stepper tmp(*this); ++*this; return
tmp; }};
template <typename Base, typename Step>
stepper<Base, Step> step(Base initial, Step stepsize) {
return stepper<Base, Step>(stepsize, initial);
}
std::vector<int> v(10);
std::iota(v.begin(), v.end(), step(0, 5));
// gives 0, 5, 10, 15, ...
But in such cases, a std::generate or std::generate_n with a stateful
generator may be a better solution.
generator.
The iota overload I provided is a lot more concise and cleaner I feel.
[ comp.lang.c++.moderated. First time posters: Do this! ]