for_each()是个function template

#include <algorithm>头文件说明
template<class _InIt,
class _Fn1> inline
void _For_each(_InIt _First, _InIt _Last, _Fn1& _Func)
{ // perform function for each element
for (; _First != _Last; ++_First)
_Func(*_First);
} 由以上source可知,for_each()只能配合global function和function object。 #include <iostream>
#include <stdlib.h>
#include "vector"
#include "map"
#include <algorithm>
#include <atlstr.h>
#include <xfunctional>
using namespace std; //单一类对象
class CClassObj
{
public:
CClassObj(void){}
~CClassObj(void){}
void PrintElem(){
std::cout << "mem_fun_ref" << std::endl;
}
};
class ClassController
{
protected:
vector<CClassObj> _ObjVec;
public:
ClassController(void){}
~ClassController(void){}
void AddClass(CClassObj cObj){
_ObjVec.push_back(cObj);
}
void PrintElem(){
for_each(_ObjVec.begin(), _ObjVec.end(), mem_fun_ref(&CClassObj::PrintElem));
}
}; //多态
class AbstactClass
{
public:
virtual void PrintElem(){
std::cout << "Abstact mem_fun 1" << std::endl;
}
}; class MyClass1 : public AbstactClass{};
class MyClass2 : public AbstactClass
{
public:
void PrintElem(){
std::cout << "Abstact mem_fun 2" << std::endl;
}
}; class ClassCont
{
protected:
vector<AbstactClass*> _ObjVec; public:
void AddClass(AbstactClass& obj){
_ObjVec.push_back(&obj);
}
void PrintElem(){
for_each(_ObjVec.begin(), _ObjVec.end(), mem_fun(&AbstactClass::PrintElem));
}
}; struct Mystruct
{
int cnt;
string str;
Mystruct()
{
cnt = ;
str = "str";
}
}; //函数调用对象 for_each()只能配合global function和function object。
/*void Print(const Mystruct stru){ cout << stru.cnt << ", " << stru.str.c_str() << endl; }*/
void Print(const Mystruct stru, const char* str){ cout << str << stru.cnt << ", " << stru.str.c_str() << endl; } struct PrintStru
{
string _str = "";
PrintStru(string str) : _str(str){
}
void operator()(string &str){
cout << _str.c_str() << str.c_str() << endl;
}
};
int main()
{
/* Add a(1, 2), b(3, 4);*/
/* std::cout << a << " + " << b << " = " << (a + b) << std::endl;*/
vector<Mystruct> vecStru;
Mystruct stru;
vecStru.push_back(stru);
vecStru.push_back(stru);
/*for_each(vecStru.begin(), vecStru.end(), [](const Mystruct stru){cout << stru.cnt << ", " << stru.str.c_str() << endl; });//lambda可调用对象*/ //Procedure Based與for_each()搭配
/*for_each(vecStru.begin(), vecStru.end(), Print);//print: 不传入参数*/
for_each(vecStru.begin(), vecStru.end(), bind2nd(ptr_fun(Print), "elem: "));//print: 传入参数 //Object Oriented與for_each()搭配
string Arr[] = { "", "", "", "", "" };
vector<string> vecStr(Arr, Arr + sizeof(Arr) / sizeof(string));
for_each(vecStr.begin(), vecStr.end(), PrintStru(""));//print: 不传入参数
//若使用function object,也可以將參數傳給PrintStru(),透過constructor的技巧接收參數。
for_each(vecStr.begin(), vecStr.end(), PrintStru("Elem: "));//print: 不传入参数 ClassController cConT;
cConT.AddClass(CClassObj());
cConT.AddClass(CClassObj());
cConT.PrintElem(); //多态
ClassCont cT;
cT.AddClass(MyClass1());
cT.AddClass(MyClass2());
cT.PrintElem(); }

借鉴:http://www.cnblogs.com/Purple_Xiapei/archive/2012/05/27/2520477.html

最新文章

  1. canvas检测边界和弹动的实例
  2. HDU 2861 四维dp打表
  3. JMeter学习-007-JMeter 断言实例之一 - 响应断言
  4. 随机获取数据库中的某一条数据(基于yii2框架开发)
  5. js判断手机浏览器并跳转到手机网站
  6. 繁华模拟赛 Evensgn的债务
  7. V4L2读取摄像头程序流程【转】
  8. javascript的navigator对象
  9. racle undo 解析
  10. mybatis 详解(五)------动态SQL
  11. Shuttle ESB(一)——入门实例
  12. 小白的Python之路 day5 random模块和string模块详解
  13. ajax跨站请求伪造
  14. rocketmq双主模式
  15. Oracle做insert或者update时未提交事务导致表锁定解决办法
  16. 阿里云 oss 上传文件,js直传,.net 签名,回调
  17. 属性复制方法,当属性名字不一致时候可以传入匹配的Map
  18. [elk]elasticsearch dsl语句
  19. 【译】第14节---数据注解-MaxLength/MinLength
  20. .Net ASP.NET 打开指定文件夹

热门文章

  1. jquery图片上传前预览剪裁
  2. .NET开发相关使用工具和框架
  3. jquery代码规范让代码越来越好看
  4. Hadoop2的HA安装(high availability):JournalNode+ zookeeper
  5. jquery取iframe中元素
  6. Laravel5.1 搭建博客 --后台登录
  7. 【BZOJ2836】魔法树 树链剖分
  8. Oracle存储——逻辑结构
  9. 8.javascript获取表单中两个数字,并判断大小
  10. work_log