STL中mem_fun与mem_fun_ref的区别[转]
http://www.cnblogs.com/Purple_Xiapei/archive/2012/05/27/2520483.html
STL中mem_fun和mem_fun_ref的用法
怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是用循环来实现。
比如有如下的一个类:
{
public:
int DoSomething()
{
// 这里以输出一句话来代替具体的操作
cout << "Output from method DoSomething!" << endl;
return 0;
};
};
现在定义如下一个vector:
for(int i = 0; i < 13; i++)
{
ClxECS *pECS = new ClxECS;
vECS.push_back(pECS);
}
如果要对容器vECS中的所有对象都进行DoSomething()的操作,那么下面的循环可能是首先想到的方案:
vECS.at(i)->DoSomething();
当然,我们也可以用iterator:
(*it)->DoSomething();
但是,有很多C++的高手和牛人们都会给我们一个忠告,那就是:在处理STL里面的容器的时候,尽量不要自己写循环。
那么,我们就只好用STL算法里面的for_each了。
首先,添加如下一个函数:
{
return pECS->DoSomething();
}
然后就可以用for_each来实现我们想要的功能:
说了半天,似乎跟mem_fun和mem_fun_ref没有什么关系。其实,说那么多都是为了引出mem_fun和mem_fun_ref。在用for_each的时候,如果我们不添加上面的那个函数,该怎么办呢?
这个时候就该mem_fun和mem_fun_ref隆重登场了。用如下这一行代码就行了:
不用我多说,大家应该已经明白mem_fun是干什么和该怎么用的了。
mem_fun_ref的作用和用法跟mem_fun一样,唯一的不同就是:当容器中存放的是对象实体的时候用mem_fun_ref,当容器中存放的是对象的指针的时候用mem_fun。
STL中mem_fun与mem_fun_ref的区别[转]的更多相关文章
- 【转】STL中mem_fun和mem_fun_ref的用法及区别
原文:http://www.cppblog.com/mysileng/archive/2012/12/25/196615.html 引子: 怎么对容器中的所有对象都进行同一个操作?我们可能首先想到的是 ...
- STL中mem_fun和mem_fun_ref的用法
例如:假设有如下的代码: class Employee { public: int DoSomething(){} } std::vector<Employee> Emps; 假设我们要调 ...
- mem_fun与mem_fun_ref的区别
一句话:container<ClassType*>就用mem_fun,container<ClassType>就用mem_fun_ref 参考: http://www.cplu ...
- STL中mem_fun, mem_fun_ref用法
1.引言 先看一个STL中for_each的用法: #include <iostream> #include <vector> #include <algorithm&g ...
- STL中vector、list、deque和map的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...
- 【转】STL中vector、list、deque和map的区别
1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...
- C++ mem_fun 和 mem_fun_ref 的用法
假设我们有以下的一个类: 另外有一个包含 class A 对象的数组: vector<A> vec; 如何对每一个类的对象调用成员函数print. 做法1: 利用下标 for(int i= ...
- 仿函数(二、stl中常用仿函数)
提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法.容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的 ...
- C++ STL中vector(向量容器)使用简单介绍
原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...
随机推荐
- Web中的中文参数乱码
中文参数乱码 1 get方式传参,中文乱码 修改tomcat中的配置server.xml 在修改端口的标签中添加属性URIEncoding="XXX&quo ...
- 02-第一个iOS程序
第一个iOS程序 第一个iOS程序简介 初学iOS开发,研究的程序不要过于复杂,应该从最基本的开始 大房子都是由小砖一块一块堆成的,而大型app是由无数个小程序段组成的 接下来实现一个简单的“加法计算 ...
- Aaliyun Linux 64 安装jdk+mysql+tomcat
参考: http://www.blogjava.net/amigoxie/archive/2013/02/22/395605.html http://bbs.aliyun.com/read/17704 ...
- php第一节(入门语法、数据类型)
<?php /** * 变量命名用 $ 符 * 变量名称的命名规范 * 1.变量名称以$标示 * 2.变量名称只能以字母和下划线开头 * 3.变量的名称只能包含字母.下划线.数字 * 4.变量名 ...
- python查找目录及子目录下特定文件
写这篇博客的缘由: 面试归来翻脉脉发现一个陌生的朋友提出一个面试题,设计实现遍历目录及子目录,抓取.pyc文件. 并贴出两种实现方法: 个人感觉,这两种方法中规中矩,不像是python的风格.pyth ...
- 【HDOJ 1272】小希的迷宫(并查集+无环图)
描述 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道 ...
- 【PTA 天梯赛训练】六度空间(广搜)
“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论.这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够 ...
- 搭建mysql主从复制和删库数据恢复策略
搭建主从复制 主机: [mysqld] 下增加 vim /etc/my.cnf ## 设置 server_id,一般设置为 IP server_id=8 # # 复制过滤:需要备份的数据库,输出 bi ...
- python实践项目—Collatz序列
Collatz序列题意说明 编写一个名为collatz()的函数,它有一个名为number 的参数.如果参数是偶数,那么collatz()就打印出number // 2,并返回该值.如果number ...
- 记一次防火墙导致greenplum装机失败及定位修复过程
一.问题现象 20180201:15:06:25:028653 gpinitsystem:sdw1-2:gpadmin-[INFO]:--------------------------------- ...