foreach和for的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了foreach和for的区别相关的知识,希望对你有一定的参考价值。
就编码来说各有好处:for更灵活,foreach更简便
就性能来说:看图。
参考技术A 1.如果只是遍历集合或者数组,用foreach好些,快些。2.如果对集合中的值进行修改,就要用for循环了。其实foreach的内部原理其实也是Iterator,但它不能像Iterator一样可以人为的控制,而且也不能调用iterator.remove();更不能使用下标来访问每个元素,所以不能用于增加,删除等复杂的操作。举个例子:
for(String aid:list)
if(aid.equals("aa"))
list.remove(aid); //这行会报错,不能修改list的长度
所以foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句。 参考技术B 1.如果只是遍历集合或者数组,用foreach好些,快些。
2.如果对集合中的值进行修改,就要用for循环了。其实foreach的内部原理其实也是Iterator,但它不能像Iterator一样可以人为的控制,而且也不能调用iterator.remove();更不能使用下标来访问每个元素,所以不能用于增加,删除等复杂的操作。举个例子:
for(String aid:list)
if(aid.equals("aa"))
list.remove(aid); //这行会报错,不能修改list的长度
所以foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句。 参考技术C for和foreach有本质的区别
foreach的具体过程是由目标对象控制的
所以并非集合内容更改了就不可以使用foreach
而是Array和Collection对象如此实现了它而已
你却可以完全按照自己的想法去实现这一过程
也许你可以去翻一下Gof的Visitor模式,foreach看起来就是它的简化版本
我们应该把foreach当作一种设计模式而不是简单的一个循环语句去理解
目前C#里的foreach是以IEnumerable的方式去实现,这只是保留COM的实现方式,这种方式我认为其实不太便于理解
我想如果存在一个IForEachable其成员为ForEach(..),这样可能更能让人容易明白 参考技术D 1.如果只是遍历集合或者数组,用foreach好些,快些。
2.如果对集合中的值进行修改,就要用for循环了。其实foreach的内部原理其实也是Iterator,但它不能像Iterator一样可以人为的控制,而且也不能调用iterator.remove();更不能使用下标来访问每个元素,所以不能用于增加,删除等复杂的操作。本回答被提问者采纳
for each 和 for_each 有啥区别?
【中文标题】for each 和 for_each 有啥区别?【英文标题】:What is the difference between for each and for_each?for each 和 for_each 有什么区别? 【发布时间】:2019-09-17 05:06:31 【问题描述】:我接手了一个旧代码,需要使用 JNI 调用。在代码中看到for each( in )
的用法,但是这段代码在Linux下无法编译。
好想知道for each
是怎么生成的,可以使用哪些平台,Linux下编译的时候有没有?
我正在尝试理解for each
的语法,但是这个信息几乎是不可能找到的,但是有很多for_each
的用法。
在windows平台上我只用Visual Studio 2013 (v120)
编译成功,v14之后的版本异常。
在Linux平台下,我使用如下命令编译,报错很多。结果如下:
g++ -I/usr/java/jdk1.8.0_191/include/ -I/usr/java/jdk1.8.0_191/include/linux/ -fPIC -shared -o ErmjJNI.so *.cpp -pthread -std=c++11
ErmjAI.cpp: In member function ‘virtual void ErmjAI::initGame(size_t, size_t, const std::vector<std::vector<int> >&, std::string, std::string)’:
ErmjAI.cpp:74:8: error: expected ‘(’ before ‘each’
for each (size_t tile in tiles[i])
^
ErmjAI.cpp:74:21: error: expected primary-expression before ‘tile’
for each (size_t tile in tiles[i])
^
ErmjAI.cpp:74:37: error: ‘each’ was not declared in this scope
for each (size_t tile in tiles[i])
^
ErmjAI.cpp:75:4: error: expected ‘;’ before ‘’ token
^
ErmjAI.cpp:3346:1: error: expected primary-expression at end of input
我在这个(http://www.cplusplus.com/search.do?q=for+each)网站上查询了相关的API,但是没有任何收获。
这样的代码太多了,我已经失去耐心了,下面列出几个例子。
for each (size_t tile in tiles[i])
if (tile<=33)
tNum[tile]++;
_unseen_tiles_num[tile]--;
else
m_vecHua[i].push_back(tile);
很想知道如何在Linux下编译for each
语法。
想知道for each
的历史和使用平台。
我想更多地了解我应该如何理解这一点,而不是像现在这样问问题。
【问题讨论】:
使用#define each
和#define in :
,您可能会运行它,但我担心它可能会破坏其他代码。 ;-)
一一替换,#define很危险
【参考方案1】:
for each, in
是 Microsoft 编译器中的非标准语法,即使他们也不推荐使用。我建议您更改代码以使用 C++11 ranged-based for 循环。这将得到标准的编译器的支持。
for (size_t tile : tiles[i])
// your code
【讨论】:
【参考方案2】:for each (size_t tile in tiles[i])
看起来不像C++,改成:
for (size_t tile : tiles[i])
您还可以read 如何在 C++ 中使用基于范围的方法。
【讨论】:
以上是关于foreach和for的区别的主要内容,如果未能解决你的问题,请参考以下文章