博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
for_each用法
阅读量:7211 次
发布时间:2019-06-29

本文共 3022 字,大约阅读时间需要 10 分钟。

for_each()是个function template#include 
头文件说明template
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
#include
#include "vector"#include "map"#include
#include
#include
using namespace std;//单一类对象class CClassObj{public: CClassObj(void){} ~CClassObj(void){} void PrintElem(){ std::cout << "mem_fun_ref" << std::endl; }};class ClassController{protected: vector
_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
_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 = 0; 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
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[] = { "123", "123456", "12345", "12", "1" }; vector
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

转载于:https://www.cnblogs.com/zhangleibo/p/5225974.html

你可能感兴趣的文章
根据post请求调取app接口,map对象转字符串,json对象转字符串
查看>>
jenkins添加linux作为slave
查看>>
nginx学习(一):基本安装
查看>>
Oracle Enterprise Manager 11g 启停
查看>>
RabbitMQ详解(一)
查看>>
基于DNS实现智能化访问网站
查看>>
单主机Docker容器VLAN划分
查看>>
利用SVN的post-commit钩子实现多项目自动同步
查看>>
Jmeter3.1官方自带的HTML图形测试报告 + 汉化
查看>>
文件共享存储&&主备实时热备实现方案
查看>>
一文看懂迁移学习:怎样用预训练模型搞定深度学习?
查看>>
Elasticsearch 5.3 集群搭建
查看>>
linux基础命令练习1
查看>>
【MySQL】【高可用】从masterha_master_switch工具简单分析MHA的切换逻辑
查看>>
xargs 和 exec详解
查看>>
ipmi对于统一硬件管理的意义
查看>>
SQL数据库高级查询命令(3)
查看>>
Ansible-playbook 拾遗
查看>>
以DES的方式实现对称加密,并提供密钥
查看>>
latex/Xelatex书籍排版总结---顺便附上一本排好的6寸android书…
查看>>