如何在C++中使用for each循环

14
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main() {
    string str("hello world!");
    for (auto &c : str)
        c = toupper(c);
    cout << str;
    return 0;
}

这段C++代码无法编译。

错误消息:

main.cpp:21: error: a function-definition is not allowed here before ':' token

问题:

C++中是否有foreach循环(范围for循环)?上述foreach循环有什么问题?

先行致谢。


5
它存在于C++11中。确保你使用的编译器可以处理C++11,并启用所需的选项。 - jogojapan
https://dev59.com/s2Up5IYBdhLWcg3wz58H - Ken White
2个回答

16

这段代码是有效的,可以在在线编译器上演示。

请参考您编译器的文档,确保您已启用C++11。该选项通常称为-std=c++11。您可能需要下载升级版本;请检查您的GCC(当前版本为4.8)或Clang(当前版本为3.3)包管理器。


4
在C++11x之前,for_each被定义在algorithm头文件中。 只需要简单地使用:
for_each (vec.begin(), vec.end(), fn);

其中fn是一个函数,该函数将接收元素作为参数,而前两个参数则是输入迭代器。

此外,在包含了stringalgorithm后,你可以直接使用以下代码:

std::transform(str.begin(), str.end(),str.begin(), ::toupper);


4
即使在 C++11 中,std::for_each 仍然定义在 algorithm 头文件中。(虽然 C++11 引入的基于范围的 for 循环已经进入语言核心,但它并没有取代 std::for_each 算法,即使在使用情况上存在一些重叠。) - jogojapan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接