65,211
社区成员
发帖
与我相关
我的任务
分享
struct Seq
{
int a;
Seq(){a = 0;}
int operator()(){return a += 3;}
};
generate(l.begin(),l.end(),seq);//这里为什么调用了重载操作符啊???
熟知STL容器和算法,STL算法参数以传值的方式调用,因此,大致过程代码是这样的
template <class ForwardIterator, class Generator>
void generate ( ForwardIterator first, ForwardIterator last, Generator gen )
{
while (first != last) *first++ = gen();//这里gen已经是类Seq的对象,因此调用的是仿函数
}
Generator即为楼主所描绘的seq类型,构造seq对象的副本,循环中调用类Seq的仿函数operator()
#include <iostream>
#include <algorithm>
#include <vector>
#include <list>
using namespace std;
int gen()
{
static int a = 0;
return a += 3;
}
struct Seq
{
int a;
Seq(){a = 0;}
int operator()(){return a += 3;}
};
void print(int x)
{
cout << x << ' ';
}
void main()
{
vector<int> v(5);
generate(v.begin(),v.end(),gen);
for_each(v.begin(),v.end(),print);
cout << endl;
Seq seq;
list<int> l(5);
generate(l.begin(),l.end(),seq);//这里为什么调用了()重载操作符啊??基础没打好啊。
for_each(l.begin(),l.end(),print);
cout << endl;
}