当前位置:C++技术网 > 资讯 > STL中的generate函数解析

STL中的generate函数解析

更新时间:2016-04-13 17:49:04浏览次数:1+次

STL为我们提供了两个函数一个是generate与generate_n这两者都是根据一个函数对象生成一个序列,但其中的差距也有。
相同:两个函数都是:在一个range 内,每次调用Generator生成一个值,输出到指定的Iterator指向的range 中;

区别:两个函数需要的range不一样,
std::generate需要两个 ForwardIterator来提供range,输入和输出range都是[First, Last),所以在输入Iterator存在之前,Container的实际内容必须存在;generator实际执行的是覆盖操作(overwrite);而不是 insert操作.
反观std::generate 需要的参数是 OutputIterator 和 一个 N;输入range为:[0, N),输出range为:[OutputIterator, OutputIterator+N);此时输入range不需要Conatiner的存在就可以确定,所以Container的实际内容不需要存在;另外,STL提供了Insert Adapter for OutputIterator,使用Inserter,即可添加新序列至container中。

先看看实现吧:

#include <iostream>  
#include <iterator>  
#include <vector>  
#include <algorithm>  
  
#include "windows.h"

using namespace std;  
  
int nextNum() {  
    static int n = 1;  
    return n++;  
}  
  
int main() {  
    // 定义容器和 输出流迭代器  
    vector<int> vecList(8);  
    ostream_iterator<int> screen(cout, " ");  
    // nextNum 是函数指针,其必须是有返回值无参函数  
    generate(vecList.begin(),vecList.end(),nextNum);  
    cout << "vecList :" << endl;  
    copy(vecList.begin(),vecList.end(),screen);  
    cout << endl;  
  
    generate_n(vecList.begin(),3,nextNum);  
    cout << "vecList :" << endl;  
    copy(vecList.begin(),vecList.end(),screen);  
    cout << endl;  
  
	system("pause");
    return 0;  
}