在C++中实现foreach循环,比for_each更简洁!

转载 2015年11月20日 22:23:39

python,c#,java里面都有类似于foreach的结构,stl里面虽然有for_each这个函数,但是感觉使用还是太繁琐了一些,所以就自己实现了一个。 先来看看stl里面的for_each函数,官方文档上的原型如下:

示例代码如下:

不只函数原型有点不习惯,而且还要再写一个函数,比起python的实现方式,的确有点繁琐了:

我们来自己实现一个,方法肯定是用宏啦,我们来看一下第一个版本:

示例代码如下:

如果把注释掉的代码打开的话,就会报错,应该是宏无法处理逗号的原因。
而且调用起来还是有点繁琐对吧,python里面并没有要求传入容器类型,我们是不是也能把set这个参数省掉呢?
先来看一下这段代码:

这段代码是可以执行的,运行结果是100。从这一点出发,我们是不是能通过typeof(container)获得容器类型,然后通过typeof(container)::iterator创建遍历指针呢,我们来看第二个版本

然而很不幸,这段代码是无法运行的,编译结果如下:

有没有办法解决呢?
有的,我们用一个曲线救国的方法!typeof(container.begin()) ,哈哈!最终代码如下:

测试代码如下:

输入结果如下:

OK!一切正常!这应该是形式比较简单的版本啦,如果各位有什么更好的建议,欢迎留言交流~
ps:
当然,其实你连it这个参数都可以省掉,但是根据pythonic的原则(好吧,我知道自己是在写C++),要简单但不能让人迷惑,所以建议还是把it这个参数保留。



FROM: http://www.vimer.cn/2010/10/%E5%9C%A8c%E4%B8%AD%E5%AE%9E%E7%8E%B0foreach%E5%BE%AA%E7%8E%AF%EF%BC%8C%E6%AF%94for_each%E6%9B%B4%E7%AE%80%E6%B4%81%EF%BC%81.html

代码简洁之道:C++ 11 之auto+ for_each + lamda表达式

摘要:在很多中情况下,我们需要这样的运算:给vector中每个元素进行相似的处理(每个元素+1,或者其他).一般情况下,我们会选用for循环,然后然后对每个元素进行处理。实际上,C++ 11提供了了l...

vector容器的三种遍历方法

STL(Standard Template Library)中vector容器是最常见的容器之一,设计中经常需要遍历vector容器,本文介绍三种常用的vector遍历方式。 一、下标索引遍历  ...

在C++中实现foreach循环,比for_each更简洁!

原文:http://blogread.cn/it/article/2570?f=sr python,c#,java里面都有类似于foreach的结构,stl里面虽然有for_each这个函数,但是感...

c++ for_each 实现原理英文原版转载( Conditional Love: FOREACH Redux)

c++ for_each 实现原理英文原版转载 ( Conditional Love: FOREACH Redux) 本人翻译水平不足,为了不误导大家就不翻译了,哪位英语好的大神可以翻译下。 ...

forEach、for、$.each()跳出循环比较

1、for 循环   先上例子,思考输出结果,体会 break 与 continue 的不同。 1 var arr = [1,2,3,4,5,6] 2 var arrySpecial = n...

代码简洁之道:C++ 11 之auto+ for_each + lamda表达式

摘要:在很多中情况下,我们需要这样的运算:给vector中每个元素进行相似的处理(每个元素+1,或者其他).一般情况下,我们会选用for循环,然后然后对每个元素进行处理。实际上,C++ 11提供了了l...
  • qhexin
  • qhexin
  • 2015年04月11日 14:17
  • 566

代码简洁之道:C++ 11 之auto+ for_each + lamda表达式

摘要:在很多中情况下,我们需要这样的运算:给vector中每个元素进行相似的处理(每个元素+1,或者其他).一般情况下,我们会选用for循环,然后然后对每个元素进行处理。实际上,C++ 11提供了了l...

代码简洁之道:C++ 11 之auto+ for_each + lamda表达式

代码简洁之道:C++ 11 之auto+ for_each + lamda表达式 2014-08-11 14:35 摘要:在很多中情况下,我们需要这样的运算:给vector中每个元素进行相似的...

代码简洁之道:C++ 11 之auto+ for_each + lamda表达式

摘要:在很多中情况下,我们需要这样的运算:给vector中每个元素进行相似的处理(每个元素+1,或者其他).一般情况下,我们会选用for循环,然后然后对每个元素进行处理。实际上,C++ 11提供了了l...

js中关于for循环、for in、foreach、for each in

for  each  in 原谅我标题党了  因为在js中是不支持 for each(var  i  in array){}的, 关于for循环 for循环是很简单的但是注意 fo...
  • zxwbkzh
  • zxwbkzh
  • 2017年06月13日 15:35
  • 148
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在C++中实现foreach循环,比for_each更简洁!
举报原因:
原因补充:

(最多只允许输入30个字)