C++探究foreach算法
for_each在algorithm.h 中
template<class _InIt,
class _Fn1> inline
_Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func)
{ // perform function for each element
_DEBUG_RANGE_PTR(_First, _Last, _Func);
_For_each_unchecked(_Unchecked(_First), _Unchecked(_Last), _Func);
return (_Func);
}
_Func可以是一个普通函数,可以是一个函数对象。
返回值为函数对象,当需要返回值时,写一个函数对象作为回调函数入口地址。
#include <iostream>
#include<algorithm>
#include "functional"
#include <vector>
using namespace std; class MyShow
{
public:
void operator()(int n)
{
cout << n << " ";
num++;
}
int num = 0;
};
void show(int &n)
{
cout << n << " ";
}
void main()
{
vector<int> v1;
for (int i = 0; i < 5; i++)
{
v1.push_back(i + 2);
}
for_each(v1.begin(),v1.end(),show);
cout << endl;
MyShow t1;
MyShow tmp = for_each(v1.begin(), v1.end(), t1);
cout << endl;
cout << "t1:" << t1.num << endl;
cout <<"tmp:"<< tmp.num << endl;
cout << "hello" << endl;
system("pause");
}

探究for_each遍历类
#include <iostream>
#include<algorithm>
#include <functional>
#include <vector>
using namespace std;
class Ticket
{
public:
Ticket()
{
;
}
int num;
int id;
char zimu;
};
class MyShow : public std::binary_function<Ticket*, char, bool>
{
public:
bool operator()(const Ticket* t, const char &c) const
{
if (t->zimu == c)
{
cout << "车号:" << t->num << endl;
cout << "座位:" << t->id<<"排"<<t->zimu<<"座" << endl;
return true;
}
return false;
}
};
void main()
{
vector<Ticket*> v1;
for (int num = 0; num < 2; num++)
{
for (int id = 0; id < 5; id++)
{
for (int i = 0; i < 5; i++)
{
Ticket *tmp = new Ticket;
tmp->num = num;
tmp->id = id;
tmp->zimu = 'A' + i;
v1.push_back(tmp);
}
}
}
for_each(v1.begin(),v1.end(), bind2nd(MyShow(),'A'));
for (vector<Ticket*>::iterator it = v1.begin(); it != v1.end(); )
{
delete (*it);
it = v1.erase(it);
it++;
}
cout << endl;
cout << "hello" << endl;
system("pause");
}

C++探究foreach算法的更多相关文章
- 探究foreach对于迭代变量的封装性的研究
众所周知教科书上对于foreach之中的注释是在遍历过程中无法改变其遍历的元素例如声明一个数组 ,,,}; foreach(int m in ii){ m = ;//错误 “m”是一个“foreach ...
- C++探究transform算法
transform函数原型 1. template<class _InIt, class _OutIt, class _Fn1> inline _OutIt transform(_InIt ...
- A*寻路算法探究
A*寻路算法探究 A*算法常用在游戏的寻路,是一种静态网路中求解最短路径的搜索方法,也是解决很多搜索问题的算法.相对于Dijkstra,BFS这些算法在复杂的搜索更有效率.本文在U3D中进行代码的测试 ...
- AAAI 2018 论文 | 蚂蚁金服公开最新基于笔画的中文词向量算法
AAAI 2018 论文 | 蚂蚁金服公开最新基于笔画的中文词向量算法 2018-01-18 16:13蚂蚁金服/雾霾/人工智能 导读:词向量算法是自然语言处理领域的基础算法,在序列标注.问答系统和机 ...
- AdaBoost 算法-分析波士顿房价数据集
公号:码农充电站pro 主页:https://codeshellme.github.io 在机器学习算法中,有一种算法叫做集成算法,AdaBoost 算法是集成算法的一种.我们先来看下什么是集成算法. ...
- VB 共享软件防破解设计技术初探(二)
VB 共享软件防破解设计技术初探(二) ×××××××××××××××××××××××××××××××××××××××××××××× 其他文章快速链接: VB 共享软件防破解设计技术初探(一)http ...
- Java程序员的C++回归路(二)
接前: 之前记录的笔记,终于想起来上传完整. 第7章: 类 定义抽象数据类型 任何对成员对象的访问都可以解释为使用this来访问,即this->member. =default :默认构造函数. ...
- python基础之类的继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. 派生:子类继承了父类的属性,然后衍生出自己新的属性,如果子类衍生出的新 ...
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化
上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来 ...
随机推荐
- winfrom
WINFORM(winform) windows窗体应用程序(.NET Framework4,版本太高了不好,选中Visual c#) 客户端应用程序的特点是:所见即所得,就是说,编辑的什么样,启动之 ...
- Go的CSP并发模型实现:M, P, G
最近抽空研究.整理了一下Golang调度机制,学习了其他大牛的文章.把自己的理解写下来.如有错误,请指正!!! golang的goroutine机制有点像线程池: 一.go 内部有三个对 ...
- Centos6搭建sftp服务器
一.创建sftp相关用户和目录 [root@mail samba]# useradd -s /sbin/nologin -M sftp_user #创建一个系统用户,按需设置登录的shell和家目录 ...
- Redis之父九条编程忠告
最近在学习redis,特地了解了一下redis之父Salvatore Sanfilippo ,而看到了一篇优秀的文章,总解分享之 个人解读总结如下 取巧编程品质key word: 过硬的编码能力 快 ...
- Java虚拟机-JVM各种参数配置大全详细
usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server -Xms1800M -Xmx1800M -Xmn300M -Xss512K ...
- poi横纵动态导入
dao层 <insert id ="saveInTarget" parameterType="java.util.List" > INSERT IN ...
- matlab中变量问题——readonly 索引超出矩阵维度 workspacefunc 215
matlab程序运行过程中会出现如上提示,在网上检索未果,键入dbstop if error语句也无法定错误之处,就想这个错误不是一般的错误. 通过间隔打断点的方式最后定位错误为一句exist = f ...
- python的相对导入
最近断断续续学习flask,学到蓝本时候有点小问题卡住了,问题如下 导入包的时候py文件里使用了相对路径导入,但是这种导入方法不是很明白,就自己搜索加实验了终于有点眉目了 先定义一个包 adb包 这个 ...
- tensorflow 1.9 ,bazel 0.15.0,源码编ERROR, Skipping, '//tensorflow/tools/pip_package:build_pip_package',error loading packageCuda Configuration Error, Cannot find libdevice.10.bc under /usr/local/cuda-8.0
最近在看tensorflow 移动端部署,需要编译源码才支持,所以又拾起来了编译这项老工作,其中遇到问题: bazel build --cxxopt="-D_GLIBCXX_USE_CXX1 ...
- Windows 10同步时间的方法
今天在安装了Windows 10 1809(October 2018 update)之后发现时间不能同步,以前并没有出现这种情况. 1) 打开控制面板,找到时钟域地区 2) 选择日期和时间 3) 选择 ...