for each 和 for_each 有啥区别?

Posted

技术标签:

【中文标题】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++ 中使用基于范围的方法。

【讨论】:

以上是关于for each 和 for_each 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Terraform 因 for_each 参数无效/给定的“for_each”参数值不合适而失败

使用 for_each 创建的资源中带有 for_each 的动态块

匿名函数和for_each用法

std::for_each 和 std::vector 析构函数调用

STL经常使用遍历算法for_each和transform的比較

for_each用法