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
れます。ブレークポイントを使用して、コンストラクターが1回だけ呼び出されることを確認しました(コンストラクターが2回以上呼び出されることは意味がないことはわかっていますが、とにかくチェックしました)。v2
{0,1,2}
v2
{3,4,5}
GenerateNumber
静的にすることでこれを解決できることは知っていi
ますが、この動作は理解できません。i
連続する呼び出し間での値が保持されないのはなぜですか?