generate
template <class ForwardIterator, class Generator> void generate ( ForwardIterator first, ForwardIterator last, Generator gen ) { while (first != last) { *first = gen(); ++first; } }
该函数是使用gen函数产生的值填充范围内元素的值。参数gen是一个接受空参数,并返回一个对应的值的函数或者是函数对象之类的。
generate_n
template <class OutputIterator, class Size, class Generator> OutputIterator generate_n ( OutputIterator first, Size n,const Generator gen ) { while (n>0) { *first = gen(); ++first; --n; } }
返回值是first+n,generate和generate_n中的gen会被调用n(或first+n)次,而非只在循环外调用一次,这一点很重要,因为Generate不一定会在每次调用时候都返回相同的结果,因此generate允许从文件读入,取局部状态的值并更改。
#include <iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std; class F { private: static int i; public: int operator()() { return ++i; } }; int F::i=0; int main() { vector<int> v(6); generate(v.begin(),v.end(),rand);//调用c语言中的rand函数,填满v generate_n(v.begin(),3,F());//调用函数对象 for(auto i:v) cout<<i<<' '; cout<<endl; return 0; }