for_each用法
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用法的更多相关文章
- 匿名函数和for_each用法
匿名函数,C++11的 for_each 用法 #include <iostream> #include <algorithm> #include "testClas ...
- for_each 用法!
class MapTest:public CapTest{ private: set <string> MyTestContain; typedef pair <string,int ...
- CPP STL学习笔记
STL的概念 源地址 https://www.ev0l.art/index.php/archives/15/ <li> Iterator (迭代器)<li> Containe ...
- 《STL源码剖析》学习半生记:第一章小结与反思
不学STL,无以立.--陈轶阳 从1.1节到1.8节大部分都是从各方面介绍STL, 包括历史之类的(大致上是这样,因为实在看不下去我就直接略到了1.9节(其实还有一点1.8.3的内容)). 第一章里比 ...
- c++11的for新用法 (重新练习一下for_each)
看到手册的代码里面有个for的很奇怪的用法,用了一把 http://www.cplusplus.com/reference/unordered_set/unordered_set/insert/ ...
- C++11之for循环的新用法
C++使用如下方法遍历一个容器: #include "stdafx.h" #include<iostream> #include<vector> int m ...
- STL vector用法介绍
STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...
- c++ bind1st 和 bind2nd的用法
std::bind1st 和 std::bind2nd将二元函数转换为一元函数,具体用法参加下面的代码. 代码介绍了两种使用方式,第一种是使用std::less和std::greater,第二种是使用 ...
- c++ algorithm 的用法
1 , accumulate()template<class _II, class _Ty> inline_Ty accumulate(_II _F, _II _L, _Ty _V){fo ...
随机推荐
- 【Ubuntu】Windows硬盘安装Ubuntu14.04
参考:http://diybbs.zol.com.cn/1/33925_1981.html http://www.cnblogs.com/allenjin/archive/2011/11/26/22 ...
- 全局最小割模板(定S,不定T,找最小割)
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...
- ios 统一设计,iOS6也玩扁平化
转:http://esoftmobile.com/2014/01/14/build-ios6-ios7-apps/ 前言 前段时间,苹果在它的开发者网站上放出了iOS系统安装比例,其中iOS7占到78 ...
- sass学习之一:sass安装compass部署
主要参考 http://www.jianshu.com/p/5bfc9411f58f -------------------------------------------- sass基于ruby 需 ...
- netty + Protobuf (整合二)
[正文]Protobuf 消息设计 疯狂创客圈 死磕Netty 系列之12 [博客园 总入口 ] 本文说明 本篇是 netty+Protobuf 实战的第二篇,完成一个 基于Netty + Proto ...
- Python菜鸟之路:Django 路由补充1:FBV和CBV - 补充2:url默认参数
一.FBV和CBV 在Python菜鸟之路:Django 路由.模板.Model(ORM)一节中,已经介绍了几种路由的写法及对应关系,那种写法可以称之为FBV: function base view ...
- 接口测试工具 — jmeter(参数化)
1.用户定义的变量 添加一个用户定义的变量 添加变量值 2.函数生成器 函数生成 随机数生成 取当前时间 3.从文件中读取 1)新建一个TXT文档,录入数据 2)读取文件 3)使用数据,用 ${pho ...
- Python每日一练------内置函数+内置变量+内置模块
1.内置函数 Python所有的内置函数 Built-in Functions abs() divmod() input() open() staticmethod() all() e ...
- OpenSSL和https原理
https原理: 浏览器请求服务端的公钥证书,server将注冊的证书发送给client. client向办法机构验证证书的合法性,证书 包含公钥,server网址及一些信息. 验证完成,client ...
- sql server等待类型
sql server 各种等待类型-转 sql server各个等待类型及解决办法:https://www.sqlskills.com/help/waits/writelog/其他等待类型的描述和解决 ...