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

for_each用法的更多相关文章

  1. 匿名函数和for_each用法

    匿名函数,C++11的 for_each 用法 #include <iostream> #include <algorithm> #include "testClas ...

  2. for_each 用法!

    class MapTest:public CapTest{ private: set <string> MyTestContain; typedef pair <string,int ...

  3. CPP STL学习笔记

    STL的概念 源地址  https://www.ev0l.art/index.php/archives/15/ <li> Iterator (迭代器)<li> Containe ...

  4. 《STL源码剖析》学习半生记:第一章小结与反思

    不学STL,无以立.--陈轶阳 从1.1节到1.8节大部分都是从各方面介绍STL, 包括历史之类的(大致上是这样,因为实在看不下去我就直接略到了1.9节(其实还有一点1.8.3的内容)). 第一章里比 ...

  5. c++11的for新用法 (重新练习一下for_each)

    看到手册的代码里面有个for的很奇怪的用法,用了一把    http://www.cplusplus.com/reference/unordered_set/unordered_set/insert/ ...

  6. C++11之for循环的新用法

    C++使用如下方法遍历一个容器: #include "stdafx.h" #include<iostream> #include<vector> int m ...

  7. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  8. c++ bind1st 和 bind2nd的用法

    std::bind1st 和 std::bind2nd将二元函数转换为一元函数,具体用法参加下面的代码. 代码介绍了两种使用方式,第一种是使用std::less和std::greater,第二种是使用 ...

  9. c++ algorithm 的用法

    1 , accumulate()template<class _II, class _Ty> inline_Ty accumulate(_II _F, _II _L, _Ty _V){fo ...

随机推荐

  1. Class.forName(String className)这个方法的作用

    Class.forName(String className)这个方法的作用 解答:通过类的全名获得该类的类对象

  2. 使用Using的注意事项

    参数传递 C#中有四种参数类型:值类型,Ref参数,Out参数,params参数.默认参数都是以传值方式传递,这意味着方法中的变量会在内存中被分配新的存储空间,并赋值.对于引用类型,这种传值意味着传递 ...

  3. 用MathType编辑异或与非符号有什么方法

    在数学中我们会遇到各种数学符号,有运算符号,希腊符号,还有表示逻辑关系的逻辑符号等,这些大多都是比较常用的符号.其中逻辑符号中我们经常会用到异或与非等,这些符号的编辑我们常常会需要用MathType这 ...

  4. Eclipse用法和技巧

    http://blog.csdn.net/ts1122/article/category/1385337/2

  5. Linux 系统时间设置

    from:https://blog.csdn.net/yjh314/article/details/51669238 今早看到一台机器时间对不上,本以为系统时间与网络北京时间不同步,就在终端命令执行网 ...

  6. Python标准库:内置函数delattr(object, name)

    本函数是用来删除对象的属性,比方在函数setattr()里加入的属性,就能够利用这个函数来删除. 參数object是一个对象,參数name是一个字符串,但这个字符串必须是对象的属性.比方delattr ...

  7. iOS应用开发最佳实践:编写高质量的Objective-C代码

    本文转载至 http://www.cocoachina.com/industry/20131129/7445.html 点标记语法 属性和幂等方法(多次调用和一次调用返回的结果相同)使用点标记语法访问 ...

  8. Win10下Hyper-V设置网络连接

    具体方法如下. 1.点击虚拟交换机管理 2.创建虚拟交换机 选择内部 3.选择链接类型

  9. delphi,数据类型,字符、浮点、整数、数组

    字符型:string 浮点型:real 整数:integer DELPHI的浮点数声明不是用float,而是用real(8个字节),single(8个字节,单精度浮点),double(16个字节,双精 ...

  10. iOS JS与原生交互(全集)

    混合开发的重要性不言而喻,一个移动端开发的了解前端开发是一个趋向,总之每个人都向往成为一个全栈工程师,废话不多说,直接上主题 一.交互(UIWebView) 1.OC调用JS (1)OC调用代码 [s ...