c++类对象的重载函数调用问题

leewon1988 2009-04-03 07:42:29

struct Seq
{
int a;
Seq(){a = 0;}
int operator()(){return a += 3;}
};
generate(l.begin(),l.end(),seq);//这里为什么调用了重载操作符啊???
...全文
182 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
douyangyang 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tangshuiling 的回复:]
C/C++ code熟知STL容器和算法,STL算法参数以传值的方式调用,因此,大致过程代码是这样的
template<classForwardIterator,classGenerator>voidgenerate ( ForwardIterator first, ForwardIterator last, Generator gen )
{while(first!=last)*first++=gen();//这里gen已经是类Seq的对象,因此调用的是仿函数}
Generator即为楼主所描绘的seq类型,构造seq对象的副本,循环中调用类Seq的仿函数operator()
[/Quote]

顶,学习了。
tangshuiling 2009-04-03
  • 打赏
  • 举报
回复

熟知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()


lockhall 2009-04-03
  • 打赏
  • 举报
回复
generate()函数定义呢?
wolfkoala 2009-04-03
  • 打赏
  • 举报
回复
没明白
leewon1988 2009-04-03
  • 打赏
  • 举报
回复

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

leewon1988 2009-04-03
  • 打赏
  • 举报
回复
来人啊。。。。。。
mengde007 2009-04-03
  • 打赏
  • 举报
回复
帖子要全……

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧