generate和generate_n

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;
}

猜你喜欢

转载自www.cnblogs.com/tianzeng/p/10383344.html