14. generate:将(仿)函数得到的值赋值给输入范围的各个元素.
generate_n:将(仿)函数得到的值赋值给first-first+n的各个元素
class IntSequence
{
private:
intvalue;
public:
IntSequence( intinitialValue ):value( initialValue ){}
int operator()()
{
returnvalue ++;
}
intretValue()
{
returnvalue;
}
};
int main()
{
vector<int>coll;
IntSequence seq(10);
generate_n( back_inserter( coll),9,IntSequence( 1 ) );
generate( coll.begin() +2,coll.end(),IntSequence( 2 ) );
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," " ) );
cout<<"\n";
generate( coll.begin(),coll.end(),seq);
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," " ) );
cout<<"\nseq的状态为"<<seq.retValue();
system( "pause");
return0;
}
输出结果:
1 2 2 3 4 5 6 7 8
10 11 12 13 14 15 1617 18
seq的状态为:10请按任意键继续. . .
注意:仿函数是有状态的.即可把其当做”类”.从generate(_n)函数可以看出其是将seq以passed by value的方式传给函数的局部仿函数.并不影响传递之前的状态如果想要把改变的值传回给调用者,可以使用引用.