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");
}

  

原文地址:https://www.cnblogs.com/smh2015/p/9740246.html

时间: 2024-10-10 05:17:37

C++探究foreach算法的相关文章

探究foreach对于迭代变量的封装性的研究

众所周知教科书上对于foreach之中的注释是在遍历过程中无法改变其遍历的元素例如声明一个数组 int[] ii={0,1,2,3}; foreach(int m in ii){ m = 3;//错误 “m”是一个“foreach 迭代变量”,无法为它赋值 Console.WriteLine(m); } 由上面可以知道,我们无法改变数组里面的值,但是foreach语句是为了集合而创建的,数组只是集合的一种,而其他集合会是怎么样的呢?C#里面为我们创建好了好几个集合类,List<T> ,Arra

C++探究transform算法

transform函数原型 1. template<class _InIt, class _OutIt, class _Fn1> inline _OutIt transform(_InIt _First, _InIt _Last, _OutIt _Dest, _Fn1 _Func) { // transform [_First, _Last) with _Func _DEPRECATE_UNCHECKED(transform, _Dest); return (_Transform_no_dep

常见的五类排序算法图解和实现(交换类:冒泡排序,递归的快速排序)

冒泡排序算法: 总的来说就是两两交换,反复直到有序,第一个记录和第二个记录,若逆序则交换,然后比较第二个和第三个记录,以此类推,直到第 n 个记录和第 n-1个记录比较完毕为止,第一趟排序,结果关键字最大的记录被安排在最后一个位置.对前 n-1个记录继续冒泡排序,使得关键字次大的记录安排在第 n-1个位置.如此重复,直到没有需要交换的记录为止(仅仅是第一个和第二个交换过为止).整个一趟趟的选出最值的过程,仿佛是那水里的气泡,咕嘟咕嘟的往上翻的过程. 递增冒泡排序过程图解: 一般先比较第一个元素和

被算法阴影支配的我——算是什么鬼

什么是算法? 现在,作为一个小白的我(曾小白),思考讨论这个问题并把它写成这篇随笔,应该是一个不自量力,很狂妄的行为. 虽然写出来的东西可能有不少谬误,会让人贻笑大方,但是要深入的去探究一下算法,还是要思考一下算法的本质是什么. 对于这个问题主要有这么几个说法: 1.算法就是解决问题的步骤 2.算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.(来自<百度百科>) 3.算法(algorithm)就是定义良好的计算过程,该过程取某个值或

【转】关于程序员成长的一点思考

新闻来源:51CTO 程序员的我们,是否想过今后的路该怎么走.如何发展.技术怎样提高?其实这也是我一直在思考的问题.下面就此问题,分享下我的看法.因为我阅历有限,有什么说的不对的,大家一起喷! 一.程序员应该打好基础 1. 现在开发工具众多.语言泛滥,经常听人说”不学C C++神马都是浮云”.”C C++才是万王之王”,C C++就真比PHP.Lua.AS.JAVA牛吗? 其实不在于语言本身,而在于C C++依附的平台.因为最靠近操作系统,所以能发挥其它语言不具有的性能优势,而且很多数据结构.算

关于程序员成长的一点思考

一.程序员应该打好基础 1. 现在开发工具众多.语言泛滥,经常听人说”不学C++神马都是浮云”.”C++才是万王之王”,C++就真比PHP.Lua.AS.JAVA牛吗? 其实不在于语言本身,而在于C++依附的平台.因为最靠近操作系统,所以能发挥其它语言不具有的性能优势,而且很多数据结构.算法.特殊功能类,C++是不提供的,需要自己实现.这时就需要自己去温习”数据结构”.”算法”.”TCP/IP”.”操作系统原理”.”编译原理”等这些知识.正因为如此,我们学习的东西被沉淀下来,也正因如此,C++经

8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化

上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来探讨一下非递归方案 实验结果令人还是有些失望,原来非递归方案的性能并不比递归方案性能高 代码如下: package com.newflypig.eightqueen; import java.util.Date; /** * 使用循环控制来实现回溯,解决N皇后 * @author [email pr

试探究一种查找素数算法

解题思路:构造链表,使用筛除法 例如:求10以内素数 链表初始化:2 3 4 5 6 7 8 9 10 进行第一轮筛选后:2 3 5 7 9 也就是用2后面的数去除2, 第二轮筛选后:2 3 5 7 也就是用3后面的数去除3, 第三轮筛选后:2 3 5 7 也就是用5后面的数去除5 第四轮筛选后:2 3 5 7 代码: #include <stdio.h> #include <stdlib.h> #define N 1e5 // over this it is so slowly

【转】对排序算法的深入探究

OI中有很多排序算法,冒泡排序,插入排序,快速排序,基数排序,以及神一般的bogo排序等等等等. 在这门不断追求速度的学科里,最快的排序方法是什么一直是信息学皇冠上的明珠.基数排序是线性的,但是却有非常大的局限性,仅仅基于比较的排序复杂度的下限是多少呢? 有一天,一个人出来妖言惑众:“基于比较的排序复杂度下限是O(n log n)的.”并且提出了伪证. 他用一棵二叉树来建立模型,通过对树的深度进行探究,从而推出排序的复杂度下限.于是人类停滞不前,再也没有人试图创新. 然而事实上,他的行为有着一个