我使用以下结构作为 STLgenerate_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为什么在连续调用之间不保留的值?