问两个STL的问题(仿函数)

fldx 2009-07-13 03:49:17
最近在学习STL的仿函数(functor),有些不是太理解,请大家解释一下。

1.在提到仿函数的优点时,说执行速度上,仿函数通常比函数指针更快。能解释一下吗?我一直认为函数指针是最快的。

2.用传引用的方式传仿函数:在VS2005 下,貌似不起作用,是编译器的问题,还是我的问题。


#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <list>
#include <string>
using namespace std;

class IntSequence
{
private:
int value;

public:
IntSequence(int init): value(init)
{
}

int operator() ()
{
return value++;
}
};

template<typename T>
void PRINT_ELEMENTS(T src)
{
T::iterator pos;

for(pos=src.begin(); pos!=src.end(); ++pos)
{
cout<<*pos<<' ';
}
cout<<endl;
}

void functior2()
{
list<int> col1;
IntSequence seq(1);

generate_n<back_insert_iterator<list<int> >, int, IntSequence&>(back_inserter(col1),4, seq);
PRINT_ELEMENTS(col1);

generate_n(back_inserter(col1),4, seq);
PRINT_ELEMENTS(col1);
}

int main()
{
functior2();
getchar();
}

预想的输出应该是:
1 2 3 4
1 2 3 4 5 6 7 8
现实的输出是:
1 2 3 4
1 2 3 4 1 2 3 4

这是为什么?编译器不支持吗? 有谁有GCC的,试一试。。谢谢。。。。
...全文
49 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fldx 2009-07-13
  • 打赏
  • 举报
回复
学习了。。。
Walf_ghoul 2009-07-13
  • 打赏
  • 举报
回复
学习一楼。。
pengzhixi 2009-07-13
  • 打赏
  • 举报
回复
没看到过算法里面的谓词是引用形式的
beyond071 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]
1 functor可以inline
2 永远不要对functor传引用。
[/Quote]
taodm 2009-07-13
  • 打赏
  • 举报
回复
1 functor可以inline
2 永远不要对functor传引用。

64,637

社区成员

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

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