Я использую следующую структуру в качестве входных данных для алгоритма 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
не сохраняется между последовательными вызовами?