Переменная экземпляра Functor не хранится между последовательные вызовы generate_n

Я использую следующую структуру в качестве входных данных для алгоритма STL generate_n:

struct GenerateNumber {     
    GenerateNumber () : i(0) {}
    int operator () (void) {        
        return  i++;
    }
private:
    int i;
};

Пример кода, использующего этот функтор:

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);

Однако в результате оба v1и v2содержат {0,1,2}вместо v2, чтобы содержать {3,4,5 }. С помощью точки останова я проверил, что конструктор GenerateNumberвызывается только один раз (я знаю, что не имеет смысла вызывать конструктор более одного раза, но я все равно проверил).

Я знаю, что могу решить эту проблему, сделав iстатическим, но я не понимаю такого поведения. Почему значение iне сохраняется между последовательными вызовами?

5
задан Itamar Katz 13 May 2012 в 09:44
поделиться