mem_fun与mem_fun_ref的区别

一句话:container<ClassType*>就用mem_fun,container<ClassType>就用mem_fun_ref

参考:

http://www.cplusplus.com/reference/functional/mem_fun/

http://www.cplusplus.com/reference/functional/mem_fun_ref/

其实这里的本质可以看这篇随笔:

http://www.cnblogs.com/qrlozte/p/4453786.html

假设我们把这篇随笔的dosomething_five改为:void dosomething_five(MemberFuncType ptr, MyClass* obj)

实现如下:

void dosomething_five(MemberFuncType ptr, MyClass *obj)
{
    (obj->*ptr)(5);
}

假设改为:void dosomething_five(MemberFuncType ptr, MyClass &obj)

实现如下:

void dosomething_five(MemberFuncType ptr, MyClass &obj)
{
     MyClass *p_obj = &obj;
    (p_obj->*ptr)(5);
}

这其实就是mem_fun和mem_fun_ref的区别

时间: 2024-10-29 19:09:48

mem_fun与mem_fun_ref的区别的相关文章

STL中mem_fun与mem_fun_ref的区别[转]

http://www.cnblogs.com/Purple_Xiapei/archive/2012/05/27/2520483.html STL中mem_fun和mem_fun_ref的用法 分类: C++2006-11-21 09:11 5244人阅读 评论(8) 收藏 举报 怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是用循环来实现.    比如有如下的一个类: class ClxECS{public:    int DoSomething()     {         //

C++ mem_fun 和 mem_fun_ref 的用法

假设我们有以下的一个类: 另外有一个包含 class A 对象的数组: vector<A> vec; 如何对每一个类的对象调用成员函数print. 做法1: 利用下标 for(int i=0; i<vec.size(); ++i) { vec[i].print(); } 做法2:利用迭代器 for(vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it) { it->print(); } 做法3:C

STL中mem_fun和mem_fun_ref的用法

怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是用循环来实现.    比如有如下的一个类: class ClxECS{public:    int DoSomething()     {         // 这里以输出一句话来代替具体的操作        cout << "Output from method DoSomething!" << endl;         return 0;     };}; 现在定义如下一个vector: vect

Effective STL 中文版(大全)

Effective STL 中文版(大全) 作者:winter 候捷说,对于STL,程序员有三个境界,开始是使用STL,然后是理解STL,最后是补充STL.Effective STL是一本非常好的书,帮助你更好的理解STL,其作者就是<Effective C++>一书的作者.如果你已经初步了解了STL的容器.迭代器.算法和函数,而又想更好的了解STL,那么<Effective STL>是你的最佳选择. 还有一部分没有找到链接,如果再找不到我会自己试着翻译一下:) 前言 容器 条款1

C++函数配接器

一.概述 配接器(adaptor)在STL组件的灵活运用功能上,扮演着轴承.转换器的角色,将一种容器或迭代器装换或封装成另一种容器或迭代器.adaptor这个概念,实际上是一种设计模式,其定义如下: 将一个class的接口转换为另一个class的接口,使原本因接口不兼容而不能合作的classes,可以一起运作. 配接器按功能可以分为如下3类: 可以改变函数或仿函数接口的适配器,称为仿函数适配器: 针对容器的适配器,称为容器适配器: 针对迭代器的适配器,称为迭代器适配器. 本博客只介绍仿函数适配器

C++ 容器一些细节

参考:http://www.cnblogs.com/answeryi/archive/2011/12/16/2289811.html: 目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五章 算法 第六章 函数 第七章 在程序中使用STL ==================================================== 第1章

迅速读懂:Effective STL (五)

这是<Effective STL>笔记最后一期,不能涵盖全部内容,书后仍然有些附加内容,不在附加,有兴趣可以找原书来读读,一则是区域设置后的忽略大小写比较,另一则是MSVC4-5编译器下STL注意事项 条款41:了解使用ptr_fun.mem_fun和mem_fun_ref的原因 函数和函数对象总使用用于非成员函数的语法形式调用.mem_fun带有一个到成员函数的指针,pmf,并返回一个mem_fun_t类型的对象.这是一个仿函数类,容纳成员函数指针并提供一个operator(),它调用指向在

c++容器使用总结(转载)

目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五章 算法 第六章 函数 第七章 在程序中使用STL ==================================================== 第1章 容器 第1条:慎重选择容器类型. 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.

C++ 容器及选用总结(转载供自学)

C++ 容器及选用总结 目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五章 算法 第六章 函数 第七章 在程序中使用STL ==================================================== 第1章 容器 第1条:慎重选择容器类型. 标准STL序列容器:vector.string.deque和list. 标准