这条线如何打印数组
How is this line printing the array?
当我今天阅读一些代码时,我偶然发现了这样的东西:
int v[5] = {1, 13, 17, 20, 16};
for_each(begin(v), end(v), [](int n){ cout << n << endl; });
我有点明白发生了什么。它使用 std::for_each 函数打印数组 v[] 的所有值。 但是[](int n){ cout << n << endl; }
有什么关系呢?
您在这里看到的是 lambda 函数在 C++ 中的使用(这是 C++11 功能)。
什么是 lambda 函数?基本上,它是一个可以在源代码中内联编写的函数。通过这样做,您可以轻松地创建内联快速函数,而以前您需要编写单独的命名函数。
在您的情况下,这是正在发生的事情:
for_each(begin(v), end(v), [](int n){ cout << n << endl; });
^^
||
这是告诉编译器我们在这里创建的是一个 lambda 函数的标识符。
for_each(begin(v), end(v), [](int n){ cout << n << endl; });
^^^^^
|||||
这是参数列表,在本例中是来自数组v[]
的整数。
for_each(begin(v), end(v), [](int n){ cout << n << endl; });
^^^^^
|||||
从这里我们可以看到函数体。这就像你要创建一个常规函数,只是它与其余代码内联
。如前所述,lambda 函数是内联函数,因此您可能想知道返回类型在哪里。如果 lambda 不是很复杂,它是可选的,因为编译器可以推断返回类型是什么。在您的情况下,编译器知道您的函数不返回任何内容。例如,如果您希望它显式返回 int,您可以告诉编译器您希望函数返回什么,如下所示:
[] () -> int { return 2; };
相关文章:
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 在一定长度后从数组中打印时缺少整数
- 数组元素打印的递归方法
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 打印矢量数组中的所有元素
- 打印问题.我在数组中打印值时遇到一些问题
- 数组类 阵列的打印输出
- 动态分配的聊天数组打印缺失的数据和空
- 如何打印 2D 字符数组C++
- 如何修改代码以打印出数组 v2
- 在C++中初始化和打印 2D 数组
- 将浮点数转换为无符号字符数组并打印出来
- C++ 打印包含数据结构的数组
- 如何让字符数组在一行而不是多行中打印出来?
- 打印字符数组地址的正确方法
- 按字母顺序打印存储在字符数组中的信息
- 使用递归反转和打印出数组的内容
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 加载有空指针的字符数组的打印值