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 ...
随机推荐
- javascript基础语法及使用
前几年自学过JavaScript,由于从事安卓开发,就放弃了对js的学习,今天又捡起来重新学习了下,希望对大家有所帮助. 首先介绍下什么是JavaScript. JavaScript 是互联网上最流行 ...
- cobbler 修改 distro_signatures.json
edit file in /var/lib/cobbler/distro_signatures.json and restart cobblerd service 转自: https://lists. ...
- Multiview
新建3个ViewController的类 新建main.stroyboard,并配置好相应的布局(编辑界面,连接视图与类,ViewController的Storyboard ID,连接3个Button ...
- TF-IDF(词频-逆向文件频率)用于文字分类
SVM分类器:支持向量机Support Vector Machine. 一个普通的SVM就是一条直线,用来完美划分linearly separable的两类.解决线性 要解决非线性需要到高维处理: 核 ...
- WPF DataGrid 获取选中的当前行某列值
方法一: DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem; ]ToString(); 方法二: var a = ...
- 对IOS设备中UDID的一些思考
本文转载至 http://blog.csdn.net/happyrabbit456/article/details/11565209 http://blog.csdn.net/xiaoguan2008 ...
- Kotlin——高级篇(五):集合之常用操作符汇总
在上一篇文章Kotlin--高级篇(四):集合(Array.List.Set.Map)基础中讲解到了数组Array<T>.集合(List.Set.Map)的定义与初始化.但是由于篇幅的原因 ...
- SpringMVC如何接收json数据
请求头:Content-Type=application/json数据如: {"mobile":"12345678912","smsContent&q ...
- JavaScript实践-简单的贪吃蛇小游戏
实现逻辑: //获取Html中的格子(行,列) //建立数组存储所有格子(x,y) //建立数组用于存储蛇身(x,y) //生成随机坐标(x,y)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...
- java获取地址全路径
String basePath = request.getScheme()+"://"+request.getServerName()+":"+reques ...