C++ foreach
考虑下面的需求,对vector<int>中的每个元素加1,如何做?
void add(int& lhs) // 注意:要修改主调方法中的数据,这里要使用引用
{
lhs= lhs + ;
}
int intArray[] = {,,,,};
vector<int> intVector(intArray,intArray+);
1、最原始的做法:
for(vector<int>::iterator iter=intVector.begin();iter!=intVector.end();iter++)
{
add(*iter);
}
2、使用类似boost中的foreach
// 注意:要修改intVector中的元素,这里要使用引用,遍历intVector的元素,用每个元素初始化引用a
// 因为这种情况下,遍历intVector的时候,是间接地使用intVector中的元素。
BOOST_FOREACH(int& a,intVector)
{
add(a);
}
3、使用for_each
for_each(intVector.begin(),intVector.end(),add);
for_each表达的意义是对intVector的每个元素执行add方法,用(*iter)初始化add的形参。
考虑下面的需求,对vector<int>中的每个元素加一个变量,如何做?
void add(int& lhs,int rhs)
{
lhs= lhs + rhs;
}
对于第一种方法和第二种方法,很简单,直接使用对应的方法就行了。对于第三种方法怎么办呢?
也就是说,如何把变量传给形参rhs?
考虑 for_each(intVector.begin(),intVector.end(),add); 实际上等价于
for_each(intVector.begin(),intVector.end(),boost::bind(add,_1));
因此,对于这种需求,就是 for_each(intVector.begin(),intVector.end(),boost::bind(add,_1,100));
C++ foreach的更多相关文章
- 先说IEnumerable,我们每天用的foreach你真的懂它吗?
我们先思考几个问题: 为什么在foreach中不能修改item的值? 要实现foreach需要满足什么条件? 为什么Linq to Object中要返回IEnumerable? 接下来,先开始我们的正 ...
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
- 浅谈JavaScript中forEach与each
forEach是ES5中操作数组的一种方法,主要功能是遍历数组,例如: var arr = [1,2,3,4]; arr.forEach(alert); 等价于: var arr = [1, 2, 3 ...
- 《ES6基础教程》之 map、forEach、filter indexOf 用法
1,map,对数组的每个元素进行一定操作,返回一个新的数组. var oldArr = [{first_name:"Colin",last_name:"Toh" ...
- php foreach引用赋值
在写代码时发现php foreach引用赋值会导致意外的行为. 代码示例: <?php $arr = array('a','b','c'); foreach($arr as $k=>&am ...
- JAVA中的for-each循环与迭代
在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable<T>接口(位于java.lang包中),实现这个接口允许对象成为 ...
- 解决mybatis foreach 错误: Parameter '__frch_item_0' not found
解决mybatis foreach 错误: Parameter '__frch_item_0' not found 在遍历对象的属性(是ArrayList对象)时报错: org.mybatis.spr ...
- PHP 的 foreach
foreach 可以 针对 string 操作,不过会生成一个警告,并跳过该 expression, 举例: $ids = '123'; foreach ($ids as $item){ print_ ...
- Parallel.Foreach
随着多核时代的到来,并行开发越来越展示出它的强大威力! 使用并行程序,充分的利用系统资源,提高程序的性能.在.net 4.0中,微软给我们提供了一个新的命名空间:System.Threading.Ta ...
- foreach
一 foreach的语法介绍 PHP 4以上的版本包括了 foreach 结构,这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生 ...
随机推荐
- MySQL定期分析检查与优化表
定期分析表 ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] 本语句用于分析和存储表的关键字分布.在分析期间,使 ...
- 44、自定义仿IOS对话框
private Dialog myDialog = null; private void ExitLogin() { View view = LayoutInflater.from(MainActiv ...
- Pitcher Rotation
题意: n个人m个对手给出每个人能战胜每个敌人的概率,现在有g个比赛,每个人赛完后要休息4天(可重复用),求能获得胜利的最大期望个数. 分析: 因为只有每个人5天就能用一次,所以对于每个人来说,只有得 ...
- HDU5804 Price List (BestCoder Round #86 A)水题
分析:大于总和输出1 #include <cstdio> #include <cstring> #include <algorithm> using namespa ...
- java 多线程同步
一.synchronized关键字 同步方法 每个对象都包含一把锁(也叫做监视器),它自动称为对象的一部分(不必为此写任何特殊的代码).调用任何synchronized方法时,对象就会被锁定,不可再调 ...
- MapReduce 中job.setJarByClass()方法的疑惑
在调试mr实例的时候,遇到如下的情况,如图所示 说明:就是我的mr程序类名称和我设置的setJarByclass()中设置的不一样,但是程序竟然没有报错!!!!当时把我吓尿了 疑惑:如果这样设置的话, ...
- (转载)OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类
在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类,今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray ...
- mysql数据库修改密码
更改MySQL用户密码 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password(' ...
- html5 canvas 旋转扩大
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- VMWare高可用集群在企业的应用
650) this.width=650;" border="0" src="http://img1.51cto.com/attachment/201011/21 ...