Functor's instance variable is not kept between consecutive calls to generate_n
c++, functor, stl
Solution
The generator object is copied when passed to `generate_n`. Try using `std::ref`, i.e.
std::generate_n(v1.begin(), 3, std::ref(generateNumber));
std::generate_n(v2.begin(), 3, std::ref(generateNumber));
Edit: Note that `std::ref` is only available in C++11. It was introduced in TR1 as `std::tr1::ref`, and is also available in boost as `boost::ref`.
Problem
I am using the following struct as an input to STL's `generate_n` algorithm: ``` struct GenerateNumber { GenerateNumber () : i(0) {} int operator () (void) { return i++; } private: int i; }; ``` An example to the code that uses this functor is: ``` std::vector <int> v1 (3); std::vector <int> v2 (3); GenerateNumber generateNumber; std::generate_n (v1.begin (), 3, generateNumber); std::generate_n (v2.begin (), 3, generateNumber); ``` However, the result is that both `v1` and `v2` contain `{0,1,2}`, instead of `v2` to contain `{3,4,5}`. I have verified with a breakpoint that the `GenerateNumber`'s constructor is called only once (I know it doesn't make sense that the constructor is called more then once, but I checked it anyway). I know I can solve this by making `i` static, but I don't understand this behavior. How come the value of `i` is not kept between consecutive calls?