![]() |
1
25
对于每个不是标准的C或C++语法。如果希望能够在gcc或g++中编译此代码,则需要创建迭代器并使用标准for循环。 量子粒子 [编辑] 这似乎是MS VisualC++中引入的一个新特性,所以这绝对不是可移植的。裁判: http://msdn.microsoft.com/en-us/library/xey702bw%28VS.80%29.aspx [/编辑] |
![]() |
2
32
我不会用那个的。虽然这是一个诱人的特性,但是语法与即将到来的C++ 0x标准不兼容,它使用:
做同样的事。 |
![]() |
3
21
有一个非常好的便携式替代品: Boost.Foreach . 只需将这个头转储到项目中,就可以编写如下循环:
|
![]() |
4
6
如果要使用foreach,同时又不想添加其他依赖项(如boost),则此宏将帮助您:
|
![]() |
5
5
Visual C++“为每个”不是标准C++,这意味着你将无法编译你的代码在其他编译器,如G++。然而,STL建议 std::for_each 但是它的语法不那么直观。这是它的原型:
它需要两个迭代器定义一个有效的范围,并将一元函数(或函数)f应用于该范围中的每个对象。 您可以使用std::重写示例,如下所示:
但是,如果您想接近for-each结构的经典语法,并且您对使用boost很满意,那么可以使用 BOOST.FOREACH ,这会让你写
|
![]() |
6
2
Boost库有一个便携式的 ForEach imlementation . |
![]() |
7
1
您的代码确实不可移植。 下面的工作与C++ 0x标准和Visual C++ 2010(它不支持新的“远程”语法,据我所知)。
现在你可以写:
将此代码与处的Boost ForEach宏代码进行比较 http://www.boost.org/doc/libs/1_48_0/boost/foreach.hpp 这不仅很复杂,而且还依赖于其他boost库。 |
![]() |
8
0
我也推荐Boost ou ForEach。我通常沿着以下几行创建宏:
这会增加可读性。但是,您必须小心与其他foreach实现的冲突。例如,qt提供了一个“for each”,每个都有std::。 我发现,std::for-each实际上并没有节省多少时间,因为您最终会生成许多一次性函数对象来提供给for-each调用。使用STL迭代器建立循环标准的速度通常也一样快。 |
![]() |
9
-1
我投卢克一票, 坚持标准的STL算法,到目前为止你会更好。STL算法可以让你的生活非常简单、高效和安全。看一下现成的算法,比如find-if、count、count-if、sort、transform等… 第5点继续…… http://www.sgi.com/tech/stl/table_of_contents.html Boost很酷,但是如果您只对for-each宏使用它,那么在开发/构建环境设置方面就太麻烦了。 当标准C++/STL不能以“容易”的方式解决问题时,使用Boost。 |
![]() |
Matt · 获取数组长度并推入每个对象 3 年前 |
![]() |
Pouya · Foreach循环不添加计数器 3 年前 |
![]() |
Andrea De Luca · 修改forEach中的元素使条目加倍 3 年前 |
![]() |
XFMW · 为什么我的foreach循环不能统一编译?[重复] 3 年前 |
![]() |
Red · 为什么我的字体大小不适合香草js? 3 年前 |
![]() |
aRTURIUS · Terraform for_每个问题的数据类型 3 年前 |
![]() |
Yerkin · 条件不适用于PHP和mysqli 3 年前 |