相同:两个函数都是:在一个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;
}